summaryrefslogtreecommitdiff
path: root/oox/inc/oox/xls/worksheethelper.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/inc/oox/xls/worksheethelper.hxx')
-rw-r--r--oox/inc/oox/xls/worksheethelper.hxx471
1 files changed, 471 insertions, 0 deletions
diff --git a/oox/inc/oox/xls/worksheethelper.hxx b/oox/inc/oox/xls/worksheethelper.hxx
new file mode 100644
index 000000000000..632d7027403f
--- /dev/null
+++ b/oox/inc/oox/xls/worksheethelper.hxx
@@ -0,0 +1,471 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef OOX_XLS_WORKSHEETHELPER_HXX
+#define OOX_XLS_WORKSHEETHELPER_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 util { struct DateTime; }
+ namespace drawing { class XDrawPage; }
+ namespace table { class XTableColumns; }
+ namespace table { class XTableRows; }
+ namespace table { class XCell; }
+ namespace table { class XCellRange; }
+ namespace sheet { class XSpreadsheet; }
+ namespace sheet { class XSheetCellRanges; }
+} } }
+
+namespace oox {
+namespace xls {
+
+struct BinAddress;
+struct BinRange;
+class BinRangeList;
+class WorksheetSettings;
+class SharedFormulaBuffer;
+class CondFormatBuffer;
+class CommentsBuffer;
+class PageSettings;
+class SheetViewSettings;
+class VmlDrawing;
+
+// ============================================================================
+// ============================================================================
+
+/** 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 some data about a cell. */
+struct CellModel
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > mxCell;
+ ::com::sun::star::table::CellAddress maAddress;
+ ::rtl::OUString maValueStr; /// String containing cell value data.
+ ::rtl::OUString maFormulaRef; /// String containing formula range for array/shared formulas.
+ sal_Int32 mnCellType; /// Data type of the cell.
+ sal_Int32 mnFormulaType; /// Type of the imported formula.
+ sal_Int32 mnSharedId; /// Shared formula identifier for current cell.
+ sal_Int32 mnXfId; /// XF identifier for the cell.
+ sal_Int32 mnNumFmtId; /// Forced number format for the cell.
+ bool mbHasValueStr; /// True = contents of maValueStr are valid.
+ bool mbShowPhonetic; /// True = show phonetic text.
+
+ inline explicit CellModel() { reset(); }
+ void reset();
+};
+
+// ----------------------------------------------------------------------------
+
+/** Stores data about a data table a.k.a. multiple operation range. */
+struct DataTableModel
+{
+ ::rtl::OUString maRef1; /// String containing first reference cell for data table formulas.
+ ::rtl::OUString maRef2; /// String containing second reference cell for data table formulas.
+ bool mb2dTable; /// True = 2-dimensional data table.
+ bool mbRowTable; /// True = row oriented data table.
+ bool mbRef1Deleted; /// True = first reference cell deleted.
+ bool mbRef2Deleted; /// True = second reference cell deleted.
+
+ explicit DataTableModel();
+};
+
+// ----------------------------------------------------------------------------
+
+/** Stores formatting data about a range of columns. */
+struct ColumnModel
+{
+ sal_Int32 mnFirstCol; /// 1-based (!) index of first column.
+ sal_Int32 mnLastCol; /// 1-based (!) index of last column.
+ 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();
+
+ /** Expands this entry with the passed column range, if column settings are equal. */
+ bool tryExpand( const ColumnModel& rModel );
+};
+
+// ----------------------------------------------------------------------------
+
+/** Stores formatting data about a range of rows. */
+struct RowModel
+{
+ sal_Int32 mnFirstRow; /// 1-based (!) index of first row.
+ sal_Int32 mnLastRow; /// 1-based (!) index of last row.
+ 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();
+
+ /** Expands this entry with the passed row range, if row settings are equal. */
+ bool tryExpand( const RowModel& rModel );
+};
+
+// ----------------------------------------------------------------------------
+
+/** 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 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 OOBIN or BIFF validation type. */
+ void setBinType( sal_uInt8 nType );
+ /** Sets the passed OOBIN or BIFF operator. */
+ void setBinOperator( sal_uInt8 nOperator );
+ /** Sets the passed OOBIN or BIFF error style. */
+ void setBinErrorStyle( sal_uInt8 nErrorStyle );
+};
+
+// ============================================================================
+// ============================================================================
+
+class WorksheetData;
+
+class WorksheetHelper : public WorkbookHelper
+{
+public:
+ /*implicit*/ WorksheetHelper( WorksheetData& rSheetData );
+
+ /** 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 XCell interface for the passed cell address string. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >
+ getCell(
+ const ::rtl::OUString& rAddressStr,
+ ::com::sun::star::table::CellAddress* opAddress = 0 ) const;
+ /** Returns the XCell interface for the passed cell address. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >
+ getCell(
+ const BinAddress& rBinAddress,
+ ::com::sun::star::table::CellAddress* opAddress = 0 ) 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 XCellRange interface for the passed range address string. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >
+ getCellRange(
+ const ::rtl::OUString& rRangeStr,
+ ::com::sun::star::table::CellRangeAddress* opRange = 0 ) const;
+ /** Returns the XCellRange interface for the passed range address. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >
+ getCellRange(
+ const BinRange& rBinRange,
+ ::com::sun::star::table::CellRangeAddress* opRange = 0 ) 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 XSheetCellRanges interface for the passed space-separated range list. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges >
+ getCellRangeList(
+ const ::rtl::OUString& rRangesStr,
+ ApiCellRangeList* opRanges = 0 ) const;
+ /** Returns the XSheetCellRanges interface for the passed range list. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges >
+ getCellRangeList(
+ const BinRangeList& rBinRanges,
+ ApiCellRangeList* opRanges = 0 ) 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( sal_Int32 nFirstCol, sal_Int32 nLastCol ) const;
+ /** Returns the XTableRows interface for a range of rows. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableRows >
+ getRows( sal_Int32 nFirstRow, sal_Int32 nLastRow ) 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 worksheet settings object. */
+ WorksheetSettings& getWorksheetSettings() const;
+ /** Returns the buffer containing all shared formulas in this sheet. */
+ SharedFormulaBuffer& getSharedFormulas() 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 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. */
+ VmlDrawing& getVmlDrawing() const;
+
+ /** Sets the passed string to the cell. */
+ void setStringCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ const ::rtl::OUString& rText ) const;
+ /** Sets the shared string with the passed identifier to the cell. */
+ void setSharedStringCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ sal_Int32 nStringId,
+ sal_Int32 nXfId ) const;
+ /** Sets the passed date/time value to the cell and adjusts number format. */
+ void setDateTimeCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ const ::com::sun::star::util::DateTime& rDateTime ) const;
+ /** Sets the passed boolean value to the cell and adjusts number format. */
+ void setBooleanCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ bool bValue ) const;
+ /** Sets the passed BIFF error code to the cell (by converting it to a formula). */
+ void setErrorCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ const ::rtl::OUString& rErrorCode ) const;
+ /** Sets the passed BIFF error code to the cell (by converting it to a formula). */
+ void setErrorCell(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ sal_uInt8 nErrorCode ) const;
+ /** Sets cell contents to the cell specified in the passed cell model. */
+ void setCell( CellModel& orModel ) const;
+
+ /** Sets a standard number format (constant from com.sun.star.util.NumberFormat) to the passed cell. */
+ void setStandardNumFmt(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell,
+ sal_Int16 nStdNumFmt ) const;
+
+ /** Changes the current sheet type. */
+ void setSheetType( WorksheetType eSheetType );
+ /** Stores the cell formatting data of the current cell. */
+ void setCellFormat( const CellModel& rModel );
+ /** Merges the cells in the passed cell range. */
+ void setMergedRange( const ::com::sun::star::table::CellRangeAddress& rRange );
+ /** 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 a multiple table operation to the passed range. */
+ void setTableOperation(
+ const ::com::sun::star::table::CellRangeAddress& rRange,
+ const DataTableModel& rModel ) const;
+ /** 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. */
+ 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 );
+
+ /** Initial conversion before importing the worksheet. */
+ void initializeWorksheetImport();
+ /** Final conversion after importing the worksheet. */
+ void finalizeWorksheetImport();
+
+private:
+ WorksheetData& mrSheetData;
+};
+
+// ============================================================================
+
+namespace prv {
+
+typedef ::boost::shared_ptr< WorksheetData > WorksheetDataRef;
+
+struct WorksheetDataOwner
+{
+ explicit WorksheetDataOwner( WorksheetDataRef xSheetData );
+ virtual ~WorksheetDataOwner();
+ WorksheetDataRef mxSheetData;
+};
+
+} // namespace prv
+
+// ----------------------------------------------------------------------------
+
+class WorksheetHelperRoot : private prv::WorksheetDataOwner, public WorksheetHelper
+{
+public:
+ /** Returns true, if this helper refers to an existing Calc sheet. */
+ bool isValidSheet() const;
+
+protected:
+ /** Constructs from the passed data, creates and owns a new data object. */
+ explicit WorksheetHelperRoot(
+ const WorkbookHelper& rHelper,
+ ISegmentProgressBarRef xProgressBar,
+ WorksheetType eSheetType,
+ sal_Int16 nSheet );
+
+ /** Constructs from another sheet helper, does not create a data object. */
+ explicit WorksheetHelperRoot(
+ const WorksheetHelper& rHelper );
+
+ /** Constructs from another sheet helper, shares ownership of the passed helper. */
+ explicit WorksheetHelperRoot(
+ const WorksheetHelperRoot& rHelper );
+
+private:
+ WorksheetHelperRoot& operator=( const WorksheetHelperRoot& );
+};
+
+// ============================================================================
+// ============================================================================
+
+} // namespace xls
+} // namespace oox
+
+#endif
+