Line data Source code
1 : /****************************************************************************** 2 : * $Id$ 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 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #ifndef OGR_XLS_H_INCLUDED 15 : #define OGR_XLS_H_INCLUDED 16 : 17 : #include "ogrsf_frmts.h" 18 : 19 : /************************************************************************/ 20 : /* OGRXLSLayer */ 21 : /************************************************************************/ 22 : 23 : class OGRXLSDataSource; 24 : 25 : class OGRXLSLayer final : public OGRLayer, 26 : public OGRGetNextFeatureThroughRaw<OGRXLSLayer> 27 : { 28 : OGRXLSDataSource *poDS; 29 : OGRFeatureDefn *poFeatureDefn; 30 : 31 : char *pszName; 32 : int iSheet; 33 : bool bFirstLineIsHeaders; 34 : int nRows; 35 : unsigned short nCols; 36 : 37 : int nNextFID; 38 : 39 : OGRFeature *GetNextRawFeature(); 40 : 41 : void DetectHeaderLine(const void *xlshandle); 42 : void DetectColumnTypes(const void *xlshandle, int *paeFieldTypes); 43 : 44 : public: 45 : OGRXLSLayer(OGRXLSDataSource *poDSIn, const char *pszSheetname, 46 : int iSheetIn, int nRowsIn, unsigned short nColsIn); 47 : virtual ~OGRXLSLayer(); 48 : 49 : virtual void ResetReading() override; 50 61 : DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(OGRXLSLayer) 51 : 52 : virtual OGRFeatureDefn *GetLayerDefn() override; 53 : virtual GIntBig GetFeatureCount(int bForce = TRUE) override; 54 : 55 30 : virtual const char *GetName() override 56 : { 57 30 : return pszName; 58 : } 59 : 60 2 : virtual OGRwkbGeometryType GetGeomType() override 61 : { 62 2 : return wkbNone; 63 : } 64 : 65 : virtual int TestCapability(const char *) override; 66 : 67 1 : virtual OGRSpatialReference *GetSpatialRef() override 68 : { 69 1 : return nullptr; 70 : } 71 : 72 : GDALDataset *GetDataset() override; 73 : }; 74 : 75 : /************************************************************************/ 76 : /* OGRXLSDataSource */ 77 : /************************************************************************/ 78 : 79 : class OGRXLSDataSource final : public GDALDataset 80 : { 81 : OGRLayer **papoLayers; 82 : int nLayers; 83 : 84 : const void *xlshandle; 85 : 86 : CPLString m_osANSIFilename; 87 : #ifdef _WIN32 88 : CPLString m_osTempFilename; 89 : #endif 90 : public: 91 : OGRXLSDataSource(); 92 : virtual ~OGRXLSDataSource(); 93 : 94 : int Open(const char *pszFilename, int bUpdate); 95 : 96 29 : virtual int GetLayerCount() override 97 : { 98 29 : return nLayers; 99 : } 100 : 101 : virtual OGRLayer *GetLayer(int) override; 102 : 103 : const void *GetXLSHandle(); 104 : }; 105 : 106 : #endif /* ndef OGR_XLS_H_INCLUDED */