| /************************************************************** |
| * |
| * 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_XECONTENT_HXX |
| #define SC_XECONTENT_HXX |
| |
| #include "rangelst.hxx" |
| #include "xlcontent.hxx" |
| #include "xladdress.hxx" |
| #include "xerecord.hxx" |
| #include "xeroot.hxx" |
| #include "xestring.hxx" |
| #include "xeformula.hxx" |
| |
| /* ============================================================================ |
| Classes to export the big Excel document contents (related to several cells or |
| globals for the sheet or document). |
| - Shared string table |
| - Merged cells |
| - Hyperlinks |
| - Label ranges |
| - Conditional formatting |
| - Data validation |
| - Web Queries |
| ============================================================================ */ |
| |
| // Shared string table ======================================================== |
| |
| class XclExpSstImpl; |
| |
| /** Provides export of the SST (shared string table) record. |
| @descr Contains all strings in the document and writes the SST. */ |
| class XclExpSst : public XclExpRecordBase |
| { |
| public: |
| explicit XclExpSst(); |
| virtual ~XclExpSst(); |
| |
| /** Inserts a new string into the table. |
| @return The index of the string in the SST, used in other records. */ |
| sal_uInt32 Insert( XclExpStringRef xString ); |
| |
| /** Writes the complete SST and EXTSST records. */ |
| virtual void Save( XclExpStream& rStrm ); |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| typedef ::std::auto_ptr< XclExpSstImpl > XclExpSstImplPtr; |
| XclExpSstImplPtr mxImpl; |
| }; |
| |
| // Merged cells =============================================================== |
| |
| /** Represents a MERGEDCELLS record containing all merged cell ranges in a sheet. */ |
| class XclExpMergedcells : public XclExpRecordBase, protected XclExpRoot |
| { |
| public: |
| explicit XclExpMergedcells( const XclExpRoot& rRoot ); |
| |
| /** Appends a new range to the list of merged cell ranges. */ |
| void AppendRange( const ScRange& rRange, sal_uInt32 nBaseXFId ); |
| /** Returns the XF identifier of the top-left cell in a merged range. */ |
| sal_uInt32 GetBaseXFId( const ScAddress& rPos ) const; |
| |
| /** Writes the record, if it contains at least one merged cell range. */ |
| virtual void Save( XclExpStream& rStrm ); |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| ScRangeList maMergedRanges; /// All merged cell ranges of the sheet. |
| ScfUInt32Vec maBaseXFIds; /// The XF identifiers of the top-left cells. |
| }; |
| |
| // Hyperlinks ================================================================= |
| |
| class SvxURLField; |
| class INetURLObject; |
| |
| /** Provides export of hyperlink data. */ |
| class XclExpHyperlink : public XclExpRecord |
| { |
| public: |
| /** Constructs the HLINK record from an URL text field. */ |
| explicit XclExpHyperlink( const XclExpRoot& rRoot, |
| const SvxURLField& rUrlField, const ScAddress& rScPos ); |
| virtual ~XclExpHyperlink(); |
| |
| /** Returns the cell representation text or 0, if not available. */ |
| inline const String* GetRepr() const { return mxRepr.get(); } |
| |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| private: |
| /** Builds file name from the passed file URL. Tries to convert to relative file name. |
| @param rnLevel (out-param) The parent directory level. |
| @param rbRel (out-param) true = path is relative. */ |
| String BuildFileName( |
| sal_uInt16& rnLevel, bool& rbRel, |
| const String& rUrl, const XclExpRoot& rRoot ) const; |
| |
| /** Writes the body of the HLINK record. */ |
| virtual void WriteBody( XclExpStream& rStrm ); |
| |
| private: |
| typedef ::std::auto_ptr< String > StringPtr; |
| typedef ::std::auto_ptr< SvStream > SvStreamPtr; |
| |
| ScAddress maScPos; /// Position of the hyperlink. |
| StringPtr mxRepr; /// Cell representation text. |
| SvStreamPtr mxVarData; /// Buffer stream with variable data. |
| sal_uInt32 mnFlags; /// Option flags. |
| XclExpStringRef mxTextMark; /// Location within mxRepr |
| ::rtl::OUString msTarget; /// Target URL |
| }; |
| |
| typedef XclExpRecordList< XclExpHyperlink > XclExpHyperlinkList; |
| |
| // Label ranges =============================================================== |
| |
| /** Provides export of the row/column label range list of a sheet. */ |
| class XclExpLabelranges : public XclExpRecordBase, protected XclExpRoot |
| { |
| public: |
| /** Fills the cell range lists with all ranges of the current sheet. */ |
| explicit XclExpLabelranges( const XclExpRoot& rRoot ); |
| |
| /** Writes the LABELRANGES record if it contains at least one range. */ |
| virtual void Save( XclExpStream& rStrm ); |
| |
| private: |
| /** Fills the specified range list with all label headers of the current sheet. |
| @param rRanges The cell range list to fill. |
| @param xLabelRangesRef The core range list with all ranges. |
| @param nScTab The current Calc sheet index. */ |
| void FillRangeList( ScRangeList& rScRanges, |
| ScRangePairListRef xLabelRangesRef, SCTAB nScTab ); |
| |
| private: |
| ScRangeList maRowRanges; /// Cell range list for row labels. |
| ScRangeList maColRanges; /// Cell range list for column labels. |
| }; |
| |
| // Conditional formatting ===================================================== |
| |
| class ScCondFormatEntry; |
| class XclExpCFImpl; |
| |
| /** Represents a CF record that contains one condition of a conditional format. */ |
| class XclExpCF : public XclExpRecord, protected XclExpRoot |
| { |
| public: |
| explicit XclExpCF( const XclExpRoot& rRoot, const ScCondFormatEntry& rFormatEntry ); |
| virtual ~XclExpCF(); |
| |
| private: |
| /** Writes the body of the CF record. */ |
| virtual void WriteBody( XclExpStream& rStrm ); |
| |
| private: |
| typedef ::std::auto_ptr< XclExpCFImpl > XclExpCFImplPtr; |
| XclExpCFImplPtr mxImpl; |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| class ScConditionalFormat; |
| |
| /** Represents a CONDFMT record that contains all conditions of a conditional format. |
| @descr Contains the conditions which are stored in CF records. */ |
| class XclExpCondfmt : public XclExpRecord, protected XclExpRoot |
| { |
| public: |
| explicit XclExpCondfmt( const XclExpRoot& rRoot, const ScConditionalFormat& rCondFormat ); |
| virtual ~XclExpCondfmt(); |
| |
| /** Returns true, if this conditional format contains at least one cell range and CF record. */ |
| bool IsValid() const; |
| |
| /** Writes the CONDFMT record with following CF records, if there is valid data. */ |
| virtual void Save( XclExpStream& rStrm ); |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| /** Writes the body of the CONDFMT record. */ |
| virtual void WriteBody( XclExpStream& rStrm ); |
| |
| private: |
| typedef XclExpRecordList< XclExpCF > XclExpCFList; |
| |
| XclExpCFList maCFList; /// List of CF records. |
| XclRangeList maXclRanges; /// Cell ranges for this conditional format. |
| String msSeqRef; /// OOXML Sequence of References |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Contains all conditional formats of a specific sheet. */ |
| class XclExpCondFormatBuffer : public XclExpRecordBase, protected XclExpRoot |
| { |
| public: |
| /** Constructs CONDFMT and CF records containing the conditional formats of the current sheet. */ |
| explicit XclExpCondFormatBuffer( const XclExpRoot& rRoot ); |
| |
| /** Writes all contained CONDFMT records with their CF records. */ |
| virtual void Save( XclExpStream& rStrm ); |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| typedef XclExpRecordList< XclExpCondfmt > XclExpCondfmtList; |
| XclExpCondfmtList maCondfmtList; /// List of CONDFMT records. |
| }; |
| |
| // Data Validation ============================================================ |
| |
| class ScValidationData; |
| |
| /** Provides export of the data of a DV record. |
| @descr This record contains the settings for a data validation. In detail |
| this is a pointer to the core validation data and a cell range list with all |
| affected cells. The handle index is used to optimize list search algorithm. */ |
| class XclExpDV : public XclExpRecord, protected XclExpRoot |
| { |
| public: |
| explicit XclExpDV( const XclExpRoot& rRoot, sal_uLong nScHandle ); |
| virtual ~XclExpDV(); |
| |
| /** Returns the core handle of the validation data. */ |
| inline sal_uLong GetScHandle() const { return mnScHandle; } |
| |
| /** Inserts a new cell range into the cell range list. */ |
| void InsertCellRange( const ScRange& rPos ); |
| /** Converts the Calc range list to the Excel range list. |
| @return false = Resulting range list empty - do not write this record. */ |
| bool Finalize(); |
| |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| /** Writes the body of the DV record. */ |
| virtual void WriteBody( XclExpStream& rStrm ); |
| |
| private: |
| ScRangeList maScRanges; /// Calc range list with all affected cells. |
| XclRangeList maXclRanges; /// Excel range list with all affected cells. |
| XclExpString maPromptTitle; /// The prompt title. |
| XclExpString maPromptText; /// The prompt text. |
| XclExpString maErrorTitle; /// The error title. |
| XclExpString maErrorText; /// The error text. |
| XclExpStringRef mxString1; /// String for first condition formula. |
| XclTokenArrayRef mxTokArr1; /// Formula for first condition. |
| ::rtl::OUString msFormula1; /// OOXML Formula for first condition. |
| XclTokenArrayRef mxTokArr2; /// Formula for second condition. |
| ::rtl::OUString msFormula2; /// OOXML Formula for second condition. |
| sal_uInt32 mnFlags; /// Miscellaneous flags. |
| sal_uLong mnScHandle; /// The core handle for quick list search. |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** This class contains the DV record list following the DVAL record. */ |
| class XclExpDval : public XclExpRecord, protected XclExpRoot |
| { |
| public: |
| explicit XclExpDval( const XclExpRoot& rRoot ); |
| virtual ~XclExpDval(); |
| |
| /** Inserts the cell range into the range list of the DV record with the specified handle. */ |
| void InsertCellRange( const ScRange& rRange, sal_uLong nScHandle ); |
| |
| /** Writes the DVAL record and the DV record list. */ |
| virtual void Save( XclExpStream& rStrm ); |
| virtual void SaveXml( XclExpXmlStream& rStrm ); |
| |
| private: |
| /** Searches for or creates a XclExpDV record object with the specified handle. */ |
| XclExpDV& SearchOrCreateDv( sal_uLong nScHandle ); |
| |
| /** Writes the body of the DVAL record. */ |
| virtual void WriteBody( XclExpStream& rStrm ); |
| |
| private: |
| typedef XclExpRecordList< XclExpDV > XclExpDVList; |
| typedef XclExpDVList::RecordRefType XclExpDVRef; |
| |
| XclExpDVList maDVList; /// List of DV records |
| XclExpDVRef mxLastFoundDV; /// For search optimization. |
| }; |
| |
| // Web Queries ================================================================ |
| |
| /** Contains all records for a web query (linked tables in an HTML document). |
| @descr mode 1 (entire document): mpQryTables==0, mbEntireDoc==true; |
| mode 2 (all tables): mpQryTables==0, mbEntireDoc==false; |
| mode 3 (custom range list): mpQryTables!=0, mbEntireDoc==false. */ |
| class XclExpWebQuery : public XclExpRecordBase |
| { |
| public: |
| /** Constructs a web query record container with settings from Calc. */ |
| explicit XclExpWebQuery( |
| const String& rRangeName, |
| const String& rUrl, |
| const String& rSource, |
| sal_Int32 nRefrSecs ); |
| virtual ~XclExpWebQuery(); |
| |
| /** Writes all needed records for this web query. */ |
| virtual void Save( XclExpStream& rStrm ); |
| |
| private: |
| XclExpString maDestRange; /// Destination range. |
| XclExpString maUrl; /// Source document URL. |
| XclExpStringRef mxQryTables; /// List of source range names. |
| sal_Int16 mnRefresh; /// Refresh time in minutes. |
| bool mbEntireDoc; /// true = entire document. |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Contains all web query records for this document. */ |
| class XclExpWebQueryBuffer : public XclExpRecordList< XclExpWebQuery > |
| { |
| public: |
| explicit XclExpWebQueryBuffer( const XclExpRoot& rRoot ); |
| }; |
| |
| // ============================================================================ |
| |
| #endif |
| |