1 /****************************************************************************** 2 * $Id: ogr_xls.h bc3d9f5351962c422f3e57a9ab1a251d91659192 2020-05-09 21:07:14 +0200 Even Rouault $ 3 * 4 * Project: XLS Translator 5 * Purpose: Definition of classes for OGR .xls driver. 6 * Author: Even Rouault, even dot rouault at spatialys.com 7 * 8 ****************************************************************************** 9 * Copyright (c) 2011-2012, Even Rouault <even dot rouault at spatialys.com> 10 * 11 * Permission is hereby granted, free of charge, to any person obtaining a 12 * copy of this software and associated documentation files (the "Software"), 13 * to deal in the Software without restriction, including without limitation 14 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 15 * and/or sell copies of the Software, and to permit persons to whom the 16 * Software is furnished to do so, subject to the following conditions: 17 * 18 * The above copyright notice and this permission notice shall be included 19 * in all copies or substantial portions of the Software. 20 * 21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 27 * DEALINGS IN THE SOFTWARE. 28 ****************************************************************************/ 29 30 #ifndef OGR_XLS_H_INCLUDED 31 #define OGR_XLS_H_INCLUDED 32 33 #include "ogrsf_frmts.h" 34 35 /************************************************************************/ 36 /* OGRXLSLayer */ 37 /************************************************************************/ 38 39 class OGRXLSDataSource; 40 41 class OGRXLSLayer final: public OGRLayer, public OGRGetNextFeatureThroughRaw<OGRXLSLayer> 42 { 43 OGRXLSDataSource* poDS; 44 OGRFeatureDefn* poFeatureDefn; 45 46 char *pszName; 47 int iSheet; 48 bool bFirstLineIsHeaders; 49 int nRows; 50 unsigned short nCols; 51 52 int nNextFID; 53 54 OGRFeature * GetNextRawFeature(); 55 56 void DetectHeaderLine(const void* xlshandle); 57 void DetectColumnTypes(const void* xlshandle, 58 int* paeFieldTypes); 59 60 public: 61 OGRXLSLayer(OGRXLSDataSource* poDSIn, 62 const char* pszSheetname, 63 int iSheetIn, 64 int nRowsIn, 65 unsigned short nColsIn); 66 virtual ~OGRXLSLayer(); 67 68 virtual void ResetReading() override; 69 DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(OGRXLSLayer) 70 71 virtual OGRFeatureDefn * GetLayerDefn() override; 72 virtual GIntBig GetFeatureCount( int bForce = TRUE ) override; 73 GetName()74 virtual const char *GetName() override { return pszName; } GetGeomType()75 virtual OGRwkbGeometryType GetGeomType() override { return wkbNone; } 76 77 virtual int TestCapability( const char * ) override; 78 GetSpatialRef()79 virtual OGRSpatialReference *GetSpatialRef() override { return nullptr; } 80 }; 81 82 /************************************************************************/ 83 /* OGRXLSDataSource */ 84 /************************************************************************/ 85 86 class OGRXLSDataSource final: public OGRDataSource 87 { 88 char* pszName; 89 90 OGRLayer** papoLayers; 91 int nLayers; 92 93 const void* xlshandle; 94 95 CPLString m_osANSIFilename; 96 #ifdef WIN32 97 CPLString m_osTempFilename; 98 #endif 99 public: 100 OGRXLSDataSource(); 101 virtual ~OGRXLSDataSource(); 102 103 int Open( const char * pszFilename, 104 int bUpdate ); 105 GetName()106 virtual const char* GetName() override { return pszName; } 107 GetLayerCount()108 virtual int GetLayerCount() override { return nLayers; } 109 virtual OGRLayer* GetLayer( int ) override; 110 111 virtual int TestCapability( const char * ) override; 112 113 const void *GetXLSHandle(); 114 }; 115 116 /************************************************************************/ 117 /* OGRXLSDriver */ 118 /************************************************************************/ 119 120 class OGRXLSDriver final: public OGRSFDriver 121 { 122 public: 123 virtual ~OGRXLSDriver(); 124 125 virtual const char* GetName() override; 126 virtual OGRDataSource* Open( const char *, int ) override; 127 virtual int TestCapability( const char * ) override; 128 }; 129 130 #endif /* ndef OGR_XLS_H_INCLUDED */ 131