| /************************************************************** |
| * |
| * 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 OOX_XLS_WORKSHEETHELPER_HXX |
| #define OOX_XLS_WORKSHEETHELPER_HXX |
| |
| #include "oox/helper/containerhelper.hxx" |
| #include "oox/helper/progressbar.hxx" |
| #include "oox/ole/olehelper.hxx" |
| #include "oox/xls/addressconverter.hxx" |
| #include "oox/xls/formulabase.hxx" |
| |
| namespace com { namespace sun { namespace star { |
| namespace awt { struct Point; } |
| namespace awt { struct Rectangle; } |
| namespace awt { struct Size; } |
| namespace drawing { class XDrawPage; } |
| namespace sheet { class XSheetCellRanges; } |
| namespace sheet { class XSpreadsheet; } |
| namespace table { class XCell; } |
| namespace table { class XCellRange; } |
| namespace table { class XTableColumns; } |
| namespace table { class XTableRows; } |
| } } } |
| |
| namespace oox { |
| namespace xls { |
| |
| class AutoFilterBuffer; |
| struct BinAddress; |
| struct BinRange; |
| class BiffSheetDrawing; |
| class BinRangeList; |
| class CommentsBuffer; |
| class CondFormatBuffer; |
| class Font; |
| class PageSettings; |
| class QueryTableBuffer; |
| class RichString; |
| class SheetDataBuffer; |
| class SheetViewSettings; |
| class VmlDrawing; |
| class WorksheetSettings; |
| |
| // ============================================================================ |
| // ============================================================================ |
| |
| /** An enumeration for all types of sheets in a workbook. */ |
| enum WorksheetType |
| { |
| SHEETTYPE_WORKSHEET, /// Worksheet. |
| SHEETTYPE_CHARTSHEET, /// Chart sheet. |
| SHEETTYPE_MACROSHEET, /// Macro sheet. |
| SHEETTYPE_DIALOGSHEET, /// Dialog sheet (BIFF5+). |
| SHEETTYPE_MODULESHEET, /// VB module sheet (BIFF5 only). |
| SHEETTYPE_EMPTYSHEET /// Other (unsupported) sheet type. |
| }; |
| |
| // ============================================================================ |
| |
| /** Stores settings and formatting data about a range of sheet columns. */ |
| struct ColumnModel |
| { |
| ValueRange maRange; /// 1-based (!) range of the described columns. |
| double mfWidth; /// Column width in number of characters. |
| sal_Int32 mnXfId; /// Column default formatting. |
| sal_Int32 mnLevel; /// Column outline level. |
| bool mbShowPhonetic; /// True = cells in column show phonetic settings. |
| bool mbHidden; /// True = column is hidden. |
| bool mbCollapsed; /// True = column outline is collapsed. |
| |
| explicit ColumnModel(); |
| |
| /** Returns true, if this entry can be merged with the passed column range (column settings are equal). */ |
| bool isMergeable( const ColumnModel& rModel ) const; |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Stores settings and formatting data about a sheet row. */ |
| struct RowModel |
| { |
| sal_Int32 mnRow; /// 1-based (!) index of the described row. |
| ValueRangeSet maColSpans; /// 0-based (!) column ranges of used cells. |
| double mfHeight; /// Row height in points. |
| sal_Int32 mnXfId; /// Row default formatting (see mbIsFormatted). |
| sal_Int32 mnLevel; /// Row outline level. |
| bool mbCustomHeight; /// True = row has custom height. |
| bool mbCustomFormat; /// True = cells in row have explicit formatting. |
| bool mbShowPhonetic; /// True = cells in row show phonetic settings. |
| bool mbHidden; /// True = row is hidden. |
| bool mbCollapsed; /// True = row outline is collapsed. |
| bool mbThickTop; /// True = row has extra space above text. |
| bool mbThickBottom; /// True = row has extra space below text. |
| |
| explicit RowModel(); |
| |
| /** Inserts the passed column span into the row model. */ |
| void insertColSpan( const ValueRange& rColSpan ); |
| /** Returns true, if this entry can be merged with the passed row range (row settings are equal). */ |
| bool isMergeable( const RowModel& rModel ) const; |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Stores formatting data about a page break. */ |
| struct PageBreakModel |
| { |
| sal_Int32 mnColRow; /// 0-based (!) index of column/row. |
| sal_Int32 mnMin; /// Start of limited break. |
| sal_Int32 mnMax; /// End of limited break. |
| bool mbManual; /// True = manual page break. |
| |
| explicit PageBreakModel(); |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Stores data about a hyperlink range. */ |
| struct HyperlinkModel : public ::oox::ole::StdHlinkInfo |
| { |
| ::com::sun::star::table::CellRangeAddress |
| maRange; /// The cell area containing the hyperlink. |
| ::rtl::OUString maTooltip; /// Additional tooltip text. |
| |
| explicit HyperlinkModel(); |
| }; |
| |
| // ---------------------------------------------------------------------------- |
| |
| /** Stores data about ranges with data validation settings. */ |
| struct ValidationModel |
| { |
| ApiCellRangeList maRanges; |
| ApiTokenSequence maTokens1; |
| ApiTokenSequence maTokens2; |
| ::rtl::OUString msRef; |
| ::rtl::OUString maInputTitle; |
| ::rtl::OUString maInputMessage; |
| ::rtl::OUString maErrorTitle; |
| ::rtl::OUString maErrorMessage; |
| sal_Int32 mnType; |
| sal_Int32 mnOperator; |
| sal_Int32 mnErrorStyle; |
| bool mbShowInputMsg; |
| bool mbShowErrorMsg; |
| bool mbNoDropDown; |
| bool mbAllowBlank; |
| |
| explicit ValidationModel(); |
| |
| /** Sets the passed BIFF validation type. */ |
| void setBiffType( sal_uInt8 nType ); |
| /** Sets the passed BIFF operator. */ |
| void setBiffOperator( sal_uInt8 nOperator ); |
| /** Sets the passed BIFF error style. */ |
| void setBiffErrorStyle( sal_uInt8 nErrorStyle ); |
| }; |
| |
| // ============================================================================ |
| // ============================================================================ |
| |
| class WorksheetGlobals; |
| typedef ::boost::shared_ptr< WorksheetGlobals > WorksheetGlobalsRef; |
| |
| class WorksheetHelper : public WorkbookHelper |
| { |
| public: |
| /*implicit*/ WorksheetHelper( WorksheetGlobals& rSheetGlob ); |
| |
| static WorksheetGlobalsRef constructGlobals( |
| const WorkbookHelper& rHelper, |
| const ISegmentProgressBarRef& rxProgressBar, |
| WorksheetType eSheetType, |
| sal_Int16 nSheet ); |
| |
| // ------------------------------------------------------------------------ |
| |
| /** Returns the type of this sheet. */ |
| WorksheetType getSheetType() const; |
| /** Returns the index of the current sheet. */ |
| sal_Int16 getSheetIndex() const; |
| /** Returns the XSpreadsheet interface of the current sheet. */ |
| const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet >& |
| getSheet() const; |
| |
| /** Returns the XCell interface for the passed cell address. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > |
| getCell( const ::com::sun::star::table::CellAddress& rAddress ) const; |
| /** Returns the XCellRange interface for the passed cell range address. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > |
| getCellRange( const ::com::sun::star::table::CellRangeAddress& rRange ) const; |
| /** Returns the XSheetCellRanges interface for the passed cell range addresses. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > |
| getCellRangeList( const ApiCellRangeList& rRanges ) const; |
| |
| /** Returns the address of the passed cell. The cell reference must be valid. */ |
| static ::com::sun::star::table::CellAddress |
| getCellAddress( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell ); |
| /** Returns the address of the passed cell range. The range reference must be valid. */ |
| static ::com::sun::star::table::CellRangeAddress |
| getRangeAddress( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >& rxRange ); |
| |
| /** Returns the XCellRange interface for a column. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > |
| getColumn( sal_Int32 nCol ) const; |
| /** Returns the XCellRange interface for a row. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > |
| getRow( sal_Int32 nRow ) const; |
| |
| /** Returns the XTableColumns interface for a range of columns. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableColumns > |
| getColumns( const ValueRange& rColRange ) const; |
| /** Returns the XTableRows interface for a range of rows. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableRows > |
| getRows( const ValueRange& rRowRange ) const; |
| |
| /** Returns the XDrawPage interface of the draw page of the current sheet. */ |
| ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > |
| getDrawPage() const; |
| |
| /** Returns the absolute cell position in 1/100 mm. */ |
| ::com::sun::star::awt::Point getCellPosition( sal_Int32 nCol, sal_Int32 nRow ) const; |
| /** Returns the cell size in 1/100 mm. */ |
| ::com::sun::star::awt::Size getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const; |
| /** Returns the size of the entire drawing page in 1/100 mm. */ |
| ::com::sun::star::awt::Size getDrawPageSize() const; |
| |
| /** Returns the buffer for cell contents and cell formatting. */ |
| SheetDataBuffer& getSheetData() const; |
| /** Returns the conditional formattings in this sheet. */ |
| CondFormatBuffer& getCondFormats() const; |
| /** Returns the buffer for all cell comments in this sheet. */ |
| CommentsBuffer& getComments() const; |
| /** Returns the auto filters for the sheet. */ |
| AutoFilterBuffer& getAutoFilters() const; |
| /** Returns the buffer for all web query tables in this sheet. */ |
| QueryTableBuffer& getQueryTables() const; |
| /** Returns the worksheet settings object. */ |
| WorksheetSettings& getWorksheetSettings() const; |
| /** Returns the page/print settings for this sheet. */ |
| PageSettings& getPageSettings() const; |
| /** Returns the view settings for this sheet. */ |
| SheetViewSettings& getSheetViewSettings() const; |
| /** Returns the VML drawing page for this sheet (OOXML/BIFF12 only). */ |
| VmlDrawing& getVmlDrawing() const; |
| /** Returns the BIFF drawing page for this sheet (BIFF2-BIFF8 only). */ |
| BiffSheetDrawing& getBiffDrawing() const; |
| |
| /** Changes the current sheet type. */ |
| void setSheetType( WorksheetType eSheetType ); |
| /** Sets a column or row page break described in the passed struct. */ |
| void setPageBreak( const PageBreakModel& rModel, bool bRowBreak ); |
| /** Inserts the hyperlink URL into the spreadsheet. */ |
| void setHyperlink( const HyperlinkModel& rModel ); |
| /** Inserts the data validation settings into the spreadsheet. */ |
| void setValidation( const ValidationModel& rModel ); |
| /** Sets the passed label ranges to the current sheet. */ |
| void setLabelRanges( const ApiCellRangeList& rColRanges, const ApiCellRangeList& rRowRanges ); |
| /** Sets the path to the DrawingML fragment of this sheet. */ |
| void setDrawingPath( const ::rtl::OUString& rDrawingPath ); |
| /** Sets the path to the legacy VML drawing fragment of this sheet. */ |
| void setVmlDrawingPath( const ::rtl::OUString& rVmlDrawingPath ); |
| |
| /** Extends the used area of this sheet by the passed cell position. */ |
| void extendUsedArea( const ::com::sun::star::table::CellAddress& rAddress ); |
| /** Extends the used area of this sheet by the passed cell range. */ |
| void extendUsedArea( const ::com::sun::star::table::CellRangeAddress& rRange ); |
| /** Extends the shape bounding box by the position and size of the passed rectangle (in 1/100 mm). */ |
| void extendShapeBoundingBox( const ::com::sun::star::awt::Rectangle& rShapeRect ); |
| |
| /** Sets base width for all columns (without padding pixels). This value |
| is only used, if width has not been set with setDefaultColumnWidth(). */ |
| void setBaseColumnWidth( sal_Int32 nWidth ); |
| /** Sets default width for all columns. This function overrides the base |
| width set with the setBaseColumnWidth() function. */ |
| void setDefaultColumnWidth( double fWidth ); |
| /** Converts default cell formatting for a range of columns. */ |
| void setDefaultColumnFormat( sal_Int32 nFirstCol, sal_Int32 nLastCol, sal_Int32 nXfId ); |
| /** Sets column settings for a specific range of columns. |
| @descr Column default formatting is converted directly, other settings |
| are cached and converted in the finalizeWorksheetImport() call. */ |
| void setColumnModel( const ColumnModel& rModel ); |
| |
| /** Sets default height and hidden state for all unused rows in the sheet. */ |
| void setDefaultRowSettings( |
| double fHeight, bool bCustomHeight, |
| bool bHidden, bool bThickTop, bool bThickBottom ); |
| /** Sets row settings for a specific range of rows. |
| @descr Row default formatting is converted directly, other settings |
| are cached and converted in the finalizeWorksheetImport() call. */ |
| void setRowModel( const RowModel& rModel ); |
| /** Specifies that the passed row needs to set its height manually. */ |
| void setManualRowHeight( sal_Int32 nRow ); |
| |
| /** Inserts a value cell directly into the Calc sheet. */ |
| void putValue( |
| const ::com::sun::star::table::CellAddress& rAddress, |
| double fValue ) const; |
| /** Inserts a string cell directly into the Calc sheet. */ |
| void putString( |
| const ::com::sun::star::table::CellAddress& rAddress, |
| const ::rtl::OUString& rText ) const; |
| /** Inserts a rich-string cell directly into the Calc sheet. */ |
| void putRichString( |
| const ::com::sun::star::table::CellAddress& rAddress, |
| const RichString& rString, |
| const Font* pFirstPortionFont ) const; |
| /** Inserts a formula cell directly into the Calc sheet. */ |
| void putFormulaTokens( |
| const ::com::sun::star::table::CellAddress& rAddress, |
| const ApiTokenSequence& rTokens ) const; |
| |
| /** Initial conversion before importing the worksheet. */ |
| void initializeWorksheetImport(); |
| /** Final conversion after importing the worksheet. */ |
| void finalizeWorksheetImport(); |
| |
| private: |
| WorksheetGlobals& mrSheetGlob; |
| }; |
| |
| // ============================================================================ |
| // ============================================================================ |
| |
| } // namespace xls |
| } // namespace oox |
| |
| #endif |