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.hxx354
1 files changed, 354 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..e87599409528
--- /dev/null
+++ b/oox/inc/oox/xls/worksheethelper.hxx
@@ -0,0 +1,354 @@
+/*************************************************************************
+ *
+ * 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/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 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