| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef SC_XICONTENT_HXX |
| #define SC_XICONTENT_HXX |
| |
| #include "global.hxx" |
| #include "rangelst.hxx" |
| #include "xlcontent.hxx" |
| #include "xistring.hxx" |
| #include "xiroot.hxx" |
| |
| #include <map> |
| |
| /* ============================================================================ |
| Classes to import the big Excel document contents (related to several cells or |
| globals for the document). |
| - Shared string tables |
| - Hyperlinks |
| - Label ranges |
| - Conditional formatting |
| - Data validation |
| - Web queries |
| - Stream decryption |
| ============================================================================ */ |
| |
| // Shared string table ======================================================== |
| |
| class ScBaseCell; |
| |
| /** The SST (shared string table) contains all strings used in a BIFF8 file. |
| |
| This class loads the SST, provides access to the strings, and is able to |
| create Calc string or edit cells. |
| */ |
| class XclImpSst : protected XclImpRoot |
| { |
| public: |
| explicit XclImpSst( const XclImpRoot& rRoot ); |
| |
| /** Reads the entire SST record. |
| @descr Import stream must be located at start of a SST record. */ |
| void ReadSst( XclImpStream& rStrm ); |
| |
| /** Returns a pointer to the string with the passed index. */ |
| const XclImpString* GetString( sal_uInt32 nSstIndex ) const; |
| |
| /** Creates a new text cell or edit cell for a Calc document. |
| @param nXFIndex Index to XF for first text portion (checks escapement). */ |
| ScBaseCell* CreateCell( sal_uInt32 nSstIndex, sal_uInt16 nXFIndex = 0 ) const; |
| |
| private: |
| typedef ::std::vector< XclImpString > XclImpStringVec; |
| XclImpStringVec maStrings; /// List with all strings in the SST. |
| }; |
| |
| // Hyperlinks ================================================================= |
| |
| /** Provides importing hyperlinks and inserting them into a document. */ |
| class XclImpHyperlink : ScfNoInstance |
| { |
| public: |
| /** Reads a HLINK record and inserts it into the document. |
| @descr Import stream must be located at start of a HLINK record. */ |
| static void ReadHlink( XclImpStream& rStrm ); |
| |
| /** Reads the (undocumented) embedded hyperlink data and returns the URL. */ |
| static String ReadEmbeddedData( XclImpStream& rStrm ); |
| |
| /** Inserts the URL into a range of cells. Does not modify value or formula cells. */ |
| static void InsertUrl( const XclImpRoot& rRoot, const XclRange& rXclRange, const String& rUrl ); |
| |
| /** Convert the sheet name with invalid character(s) in URL when the URL is |
| to a location within the same document (e.g. #'Sheet&Name'.A1). */ |
| static void ConvertToValidTabName(String& rName); |
| }; |
| |
| // Label ranges =============================================================== |
| |
| /** Provides importing label ranges and inserting them into a document. */ |
| class XclImpLabelranges : ScfNoInstance |
| { |
| public: |
| /** Reads a LABELRANGES record and inserts the label ranges into the document. |
| @descr Import stream must be located at start of a LABELRANGES record. */ |
| static void ReadLabelranges( XclImpStream& rStrm ); |
| }; |
| |
| // Conditional formatting ===================================================== |
| |
| class ScConditionalFormat; |
| |
| /** Represents a conditional format with condition formulas, and formatting attributes. */ |
| class XclImpCondFormat : protected XclImpRoot |
| { |
| public: |
| explicit XclImpCondFormat( const XclImpRoot& rRoot, sal_uInt32 nFormatIndex ); |
| virtual ~XclImpCondFormat(); |
| |
| /** Reads a CONDFMT record and initializes this conditional format. */ |
| void ReadCondfmt( XclImpStream& rStrm ); |
| /** Reads a CF record and adds a new condition and the formatting attributes. */ |
| void ReadCF( XclImpStream& rStrm ); |
| |
| /** Inserts this conditional format into the document. */ |
| void Apply(); |
| |
| private: |
| typedef ::std::auto_ptr< ScConditionalFormat > ScCondFmtPtr; |
| |
| ScRangeList maRanges; /// Destination cell ranges. |
| ScCondFmtPtr mxScCondFmt; /// Calc conditional format. |
| sal_uInt32 mnFormatIndex; /// Index of this conditional format in list. |
| sal_uInt16 mnCondCount; /// Number of conditions to be inserted. |
| sal_uInt16 mnCondIndex; /// Condition index to be inserted next. |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Imports and collects all conditional formatting of a sheet. */ |
| class XclImpCondFormatManager : protected XclImpRoot |
| { |
| public: |
| explicit XclImpCondFormatManager( const XclImpRoot& rRoot ); |
| |
| /** Reads a CONDFMT record and starts a new conditional format to be filled from CF records. */ |
| void ReadCondfmt( XclImpStream& rStrm ); |
| /** Reads a CF record and inserts the formatting data to the current conditional format. */ |
| void ReadCF( XclImpStream& rStrm ); |
| |
| /** Inserts the conditional formattings into the document. */ |
| void Apply(); |
| |
| private: |
| typedef ScfDelList< XclImpCondFormat > XclImpCondFmtList; |
| XclImpCondFmtList maCondFmtList; /// List with all conditional formattings. |
| }; |
| |
| // Data Validation ============================================================ |
| |
| /** Provides importing validation data and inserting it into a document. */ |
| class XclImpValidation : ScfNoInstance |
| { |
| public: |
| /** Reads a DVAL record and sets marks the dropdown arrow control to be ignored. */ |
| static void ReadDval( XclImpStream& rStrm ); |
| /** Reads a DV record and inserts validation data into the document. */ |
| static void ReadDV( XclImpStream& rStrm ); |
| }; |
| |
| // Web queries ================================================================ |
| |
| /** Stores the data of one web query. */ |
| class XclImpWebQuery : ScfNoCopy |
| { |
| public: |
| explicit XclImpWebQuery( const ScRange& rDestRange ); |
| |
| /** Reads a PARAMQRY record and sets data to the web query. */ |
| void ReadParamqry( XclImpStream& rStrm ); |
| /** Reads a WQSTRING record and sets URL. */ |
| void ReadWqstring( XclImpStream& rStrm ); |
| /** Reads a WEBQRYSETTINGS record and sets refresh rate. */ |
| void ReadWqsettings( XclImpStream& rStrm ); |
| /** Reads a WEBQRYTABLES record and sets source range list. */ |
| void ReadWqtables( XclImpStream& rStrm ); |
| |
| /** Inserts the web query into the document. */ |
| void Apply( ScDocument& rDoc, const String& rFilterName ); |
| |
| private: |
| /** Specifies the type of the web query (which ranges are imported). */ |
| enum XclImpWebQueryMode |
| { |
| xlWQUnknown, /// Not specified. |
| xlWQDocument, /// Entire document. |
| xlWQAllTables, /// All tables. |
| xlWQSpecTables /// Specific tables. |
| }; |
| |
| String maURL; /// Source document URL. |
| String maTables; /// List of source range names. |
| ScRange maDestRange; /// Destination range. |
| XclImpWebQueryMode meMode; /// Current mode of the web query. |
| sal_uInt16 mnRefresh; /// Refresh time in minutes. |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| class XclImpWebQueryBuffer : protected XclImpRoot |
| { |
| public: |
| explicit XclImpWebQueryBuffer( const XclImpRoot& rRoot ); |
| |
| /** Reads the QSI record and creates a new web query in the buffer. */ |
| void ReadQsi( XclImpStream& rStrm ); |
| /** Reads a PARAMQRY record and sets data to the current web query. */ |
| void ReadParamqry( XclImpStream& rStrm ); |
| /** Reads a WQSTRING record and sets URL to the current web query. */ |
| void ReadWqstring( XclImpStream& rStrm ); |
| /** Reads a WEBQRYSETTINGS record and sets refresh rate to the current web query. */ |
| void ReadWqsettings( XclImpStream& rStrm ); |
| /** Reads a WEBQRYTABLES record and sets source range list to the current web query. */ |
| void ReadWqtables( XclImpStream& rStrm ); |
| |
| /** Inserts all web queries into the document. */ |
| void Apply(); |
| |
| private: |
| typedef ScfDelList< XclImpWebQuery > XclImpWebQueryList; |
| XclImpWebQueryList maWQList; /// List of the web query objects. |
| }; |
| |
| // Decryption ================================================================= |
| |
| /** Provides static functions to import stream decryption settings. */ |
| class XclImpDecryptHelper : ScfNoInstance |
| { |
| public: |
| /** Reads the FILEPASS record, queries a password and sets decryption algorihm. |
| @return Error code that may cause an error message after import. */ |
| static ErrCode ReadFilepass( XclImpStream& rStrm ); |
| }; |
| |
| // ============================================================================ |
| |
| // Document protection ======================================================== |
| |
| class XclImpDocProtectBuffer : protected XclImpRoot |
| { |
| public: |
| explicit XclImpDocProtectBuffer( const XclImpRoot& rRoot ); |
| |
| /** document structure protection flag */ |
| void ReadDocProtect( XclImpStream& rStrm ); |
| |
| /** document windows properties protection flag */ |
| void ReadWinProtect( XclImpStream& rStrm ); |
| |
| void ReadPasswordHash( XclImpStream& rStrm ); |
| |
| void Apply() const; |
| |
| private: |
| sal_uInt16 mnPassHash; |
| bool mbDocProtect:1; |
| bool mbWinProtect:1; |
| }; |
| |
| // Sheet protection =========================================================== |
| |
| class XclImpSheetProtectBuffer : protected XclImpRoot |
| { |
| public: |
| explicit XclImpSheetProtectBuffer( const XclImpRoot& rRoot ); |
| |
| void ReadProtect( XclImpStream& rStrm, SCTAB nTab ); |
| |
| void ReadOptions( XclImpStream& rStrm, SCTAB nTab ); |
| |
| void ReadPasswordHash( XclImpStream& rStrm, SCTAB nTab ); |
| |
| void Apply() const; |
| |
| private: |
| struct Sheet |
| { |
| bool mbProtected; |
| sal_uInt16 mnPasswordHash; |
| sal_uInt16 mnOptions; |
| |
| Sheet(); |
| Sheet(const Sheet& r); |
| }; |
| |
| Sheet* GetSheetItem( SCTAB nTab ); |
| |
| private: |
| typedef ::std::map<SCTAB, Sheet> ProtectedSheetMap; |
| ProtectedSheetMap maProtectedSheets; |
| }; |
| |
| |
| // ============================================================================ |
| |
| #endif |
| |