1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef SC_XMLEXPRT_HXX 24 #define SC_XMLEXPRT_HXX 25 26 #include <xmloff/xmlexp.hxx> 27 #include <com/sun/star/sheet/XSpreadsheet.hpp> 28 #include <com/sun/star/sheet/XSpreadsheetDocument.hpp> 29 #include <com/sun/star/table/CellRangeAddress.hpp> 30 #include <com/sun/star/table/CellAddress.hpp> 31 #include <com/sun/star/drawing/XShapes.hpp> 32 #include <com/sun/star/table/XCellRange.hpp> 33 34 namespace com { namespace sun { namespace star { 35 namespace beans { class XPropertySet; } 36 } } } 37 38 #include <hash_map> 39 40 class ScOutlineArray; 41 class SvXMLExportPropertyMapper; 42 class ScMyShapesContainer; 43 class ScMyMergedRangesContainer; 44 class ScMyValidationsContainer; 45 class ScMyNotEmptyCellsIterator; 46 class ScChangeTrackingExportHelper; 47 class ScColumnStyles; 48 class ScRowStyles; 49 class ScFormatRangeStyles; 50 class ScRowFormatRanges; 51 class ScMyOpenCloseColumnRowGroup; 52 class ScMyAreaLinksContainer; 53 class ScMyDetectiveOpContainer; 54 struct ScMyCell; 55 class ScDocument; 56 class ScMySharedData; 57 class ScMyDefaultStyles; 58 class XMLNumberFormatAttributesExportHelper; 59 class ScChartListener; 60 class SfxItemPool; 61 class ScAddress; 62 class ScBaseCell; 63 64 typedef std::vector< com::sun::star::uno::Reference < com::sun::star::drawing::XShapes > > ScMyXShapesVec; 65 66 class ScXMLExport : public SvXMLExport 67 { 68 ScDocument* pDoc; 69 com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet> xCurrentTable; 70 com::sun::star::uno::Reference <com::sun::star::table::XCellRange> xCurrentTableCellRange; 71 72 com::sun::star::uno::Reference<com::sun::star::io::XInputStream> xSourceStream; 73 sal_Int32 nSourceStreamPos; 74 75 UniReference < XMLPropertyHandlerFactory > xScPropHdlFactory; 76 UniReference < XMLPropertySetMapper > xCellStylesPropertySetMapper; 77 UniReference < XMLPropertySetMapper > xColumnStylesPropertySetMapper; 78 UniReference < XMLPropertySetMapper > xRowStylesPropertySetMapper; 79 UniReference < XMLPropertySetMapper > xTableStylesPropertySetMapper; 80 UniReference < SvXMLExportPropertyMapper > xCellStylesExportPropertySetMapper; 81 UniReference < SvXMLExportPropertyMapper > xColumnStylesExportPropertySetMapper; 82 UniReference < SvXMLExportPropertyMapper > xRowStylesExportPropertySetMapper; 83 UniReference < SvXMLExportPropertyMapper > xTableStylesExportPropertySetMapper; 84 XMLNumberFormatAttributesExportHelper* pNumberFormatAttributesExportHelper; 85 typedef ::std::hash_map<sal_Int32, sal_Int32> NumberFormatIndexMap; 86 NumberFormatIndexMap aNumFmtIndexMap; 87 ScMySharedData* pSharedData; 88 ScColumnStyles* pColumnStyles; 89 ScRowStyles* pRowStyles; 90 ScFormatRangeStyles* pCellStyles; 91 ScRowFormatRanges* pRowFormatRanges; 92 std::vector<rtl::OUString> aTableStyles; 93 com::sun::star::table::CellRangeAddress aRowHeaderRange; 94 ScMyOpenCloseColumnRowGroup* pGroupColumns; 95 ScMyOpenCloseColumnRowGroup* pGroupRows; 96 ScMyDefaultStyles* pDefaults; 97 ScChartListener* pChartListener; 98 const ScMyCell* pCurrentCell; 99 100 ScMyMergedRangesContainer* pMergedRangesContainer; 101 ScMyValidationsContainer* pValidationsContainer; 102 ScMyNotEmptyCellsIterator* pCellsItr; 103 ScChangeTrackingExportHelper* pChangeTrackingExportHelper; 104 const rtl::OUString sLayerID; 105 const rtl::OUString sCaptionShape; 106 rtl::OUString sExternalRefTabStyleName; 107 rtl::OUString sAttrName; 108 rtl::OUString sAttrStyleName; 109 rtl::OUString sAttrColumnsRepeated; 110 rtl::OUString sAttrFormula; 111 rtl::OUString sAttrValueType; 112 rtl::OUString sAttrStringValue; 113 rtl::OUString sElemCell; 114 rtl::OUString sElemCoveredCell; 115 rtl::OUString sElemCol; 116 rtl::OUString sElemRow; 117 rtl::OUString sElemTab; 118 rtl::OUString sElemP; 119 sal_Int32 nOpenRow; 120 sal_Int32 nProgressCount; 121 sal_uInt16 nCurrentTable; 122 sal_Bool bHasRowHeader; 123 sal_Bool bRowHeaderOpen; 124 sal_Bool mbShowProgress; 125 126 sal_Int32 GetNumberFormatStyleIndex(sal_Int32 nNumFmt) const; 127 sal_Bool HasDrawPages(com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xDoc); 128 void CollectSharedData(sal_Int32& nTableCount, sal_Int32& nShapesCount, const sal_Int32 nCellCount); 129 void CollectShapesAutoStyles(const sal_Int32 nTableCount); 130 void WriteTablesView(const com::sun::star::uno::Any& aTableView); 131 void WriteView(const com::sun::star::uno::Any& aView); 132 virtual void _ExportFontDecls(); 133 virtual void _ExportStyles( sal_Bool bUsed ); 134 virtual void _ExportAutoStyles(); 135 virtual void _ExportMasterStyles(); 136 virtual void SetBodyAttributes(); 137 virtual void _ExportContent(); 138 virtual void _ExportMeta(); 139 140 void CollectInternalShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ); 141 142 com::sun::star::table::CellRangeAddress GetEndAddress(const com::sun::star::uno::Reference<com::sun::star::sheet::XSpreadsheet>& xTable, 143 const sal_Int32 nTable); 144 // ScMyEmptyDatabaseRangesContainer GetEmptyDatabaseRanges(); 145 void GetAreaLinks( com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc, ScMyAreaLinksContainer& rAreaLinks ); 146 void GetDetectiveOpList( ScMyDetectiveOpContainer& rDetOp ); 147 void WriteSingleColumn(const sal_Int32 nRepeatColumns, const sal_Int32 nStyleIndex, 148 const sal_Int32 nIndex, const sal_Bool bIsAutoStyle, const sal_Bool bIsVisible); 149 void WriteColumn(const sal_Int32 nColumn, const sal_Int32 nRepeatColumns, 150 const sal_Int32 nStyleIndex, const sal_Bool bIsVisible); 151 void OpenHeaderColumn(); 152 void CloseHeaderColumn(); 153 void ExportColumns(const sal_Int32 nTable, const com::sun::star::table::CellRangeAddress& aColumnHeaderRange, const sal_Bool bHasColumnHeader); 154 void ExportExternalRefCacheStyles(); 155 void ExportFormatRanges(const sal_Int32 nStartCol, const sal_Int32 nStartRow, 156 const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet); 157 void WriteRowContent(); 158 void WriteRowStartTag(sal_Int32 nRow, const sal_Int32 nIndex, const sal_Int8 nFlag, const sal_Int32 nEmptyRows); 159 void OpenHeaderRows(); 160 void CloseHeaderRows(); 161 void OpenNewRow(const sal_Int32 nIndex, const sal_Int8 nFlag, const sal_Int32 nStartRow, const sal_Int32 nEmptyRows); 162 void OpenAndCloseRow(const sal_Int32 nIndex, const sal_Int8 nFlag, 163 const sal_Int32 nStartRow, const sal_Int32 nEmptyRows); 164 void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow); 165 void CloseRow(const sal_Int32 nRow); 166 void GetColumnRowHeader(sal_Bool& bHasColumnHeader, com::sun::star::table::CellRangeAddress& aColumnHeaderRange, 167 sal_Bool& bHasRowHeader, com::sun::star::table::CellRangeAddress& aRowHeaderRange, 168 rtl::OUString& rPrintRanges) const; 169 void FillFieldGroup(ScOutlineArray* pFields, ScMyOpenCloseColumnRowGroup* pGroups); 170 void FillColumnRowGroups(); 171 172 //UNUSED2008-05 sal_Bool GetMerge (const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable, 173 //UNUSED2008-05 sal_Int32 nCol, sal_Int32 nRow, 174 //UNUSED2008-05 com::sun::star::table::CellRangeAddress& aCellAddress); 175 176 sal_Bool GetMerged (const com::sun::star::table::CellRangeAddress* pCellRange, 177 const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable); 178 179 sal_Bool GetCellText (ScMyCell& rMyCell, const ScAddress& aPos) const; 180 181 void WriteCell(ScMyCell& aCell, sal_Int32 nEqualCellCount); 182 void WriteAreaLink(const ScMyCell& rMyCell); 183 void WriteAnnotation(ScMyCell& rMyCell); 184 void WriteDetective(const ScMyCell& rMyCell); 185 void ExportShape(const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape, com::sun::star::awt::Point* pPoint); 186 void WriteShapes(const ScMyCell& rMyCell); 187 void WriteTableShapes(); 188 void SetRepeatAttribute(sal_Int32 nEqualCellCount, bool bIncProgress); 189 190 sal_Bool IsCellTypeEqual (const ScMyCell& aCell1, const ScMyCell& aCell2) const; 191 sal_Bool IsEditCell(const com::sun::star::table::CellAddress& aAddress, ScMyCell* pMyCell = NULL) const; 192 //UNUSED2008-05 sal_Bool IsEditCell(const com::sun::star::uno::Reference <com::sun::star::table::XCell>& xCell) const; 193 sal_Bool IsEditCell(ScMyCell& rCell) const; 194 sal_Bool IsMultiLineFormulaCell(ScMyCell& rCell) const; 195 //UNUSED2008-05 sal_Bool IsAnnotationEqual(const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell1, 196 //UNUSED2008-05 const com::sun::star::uno::Reference<com::sun::star::table::XCell>& xCell2); 197 sal_Bool IsCellEqual (ScMyCell& aCell1, ScMyCell& aCell2); 198 199 void WriteCalculationSettings(const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc); 200 void WriteTableSource(); 201 void WriteScenario(); // core implementation 202 void WriteTheLabelRanges(const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheetDocument >& xSpreadDoc); 203 void WriteLabelRanges( const com::sun::star::uno::Reference< com::sun::star::container::XIndexAccess >& xRangesIAccess, sal_Bool bColumn ); 204 void WriteNamedExpressions(const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheetDocument>& xSpreadDoc, sal_Int16 nWhichTable); 205 void WriteExternalRefCaches(); 206 void WriteConsolidation(); // core implementation 207 208 void CollectUserDefinedNamespaces(const SfxItemPool* pPool, sal_uInt16 nAttrib); 209 210 void AddStyleFromCells( 211 const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xProperties, 212 const com::sun::star::uno::Reference< com::sun::star::sheet::XSpreadsheet >& xTable, 213 sal_Int32 nTable, const rtl::OUString* pOldName ); 214 void AddStyleFromColumn( 215 const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xColumnProperties, 216 const rtl::OUString* pOldName, sal_Int32& rIndex, sal_Bool& rIsVisible ); 217 void AddStyleFromRow( 218 const com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >& xRowProperties, 219 const rtl::OUString* pOldName, sal_Int32& rIndex ); 220 221 void IncrementProgressBar(sal_Bool bEditCell, sal_Int32 nInc = 1); 222 223 void CopySourceStream( sal_Int32 nStartOffset, sal_Int32 nEndOffset, sal_Int32& rNewStart, sal_Int32& rNewEnd ); 224 225 protected: 226 virtual SvXMLAutoStylePoolP* CreateAutoStylePool(); 227 virtual XMLPageExport* CreatePageExport(); 228 virtual XMLShapeExport* CreateShapeExport(); 229 virtual XMLFontAutoStylePool* CreateFontAutoStylePool(); 230 public: 231 // #110680# 232 ScXMLExport( 233 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceFactory, 234 const sal_uInt16 nExportFlag); 235 236 virtual ~ScXMLExport(); 237 238 static sal_Int16 GetFieldUnit(); GetDocument()239 inline ScDocument* GetDocument() { return pDoc; } GetDocument() const240 inline const ScDocument* GetDocument() const { return pDoc; } 241 //UNUSED2008-05 sal_Bool IsMatrix (const com::sun::star::uno::Reference <com::sun::star::table::XCellRange>& xCellRange, 242 //UNUSED2008-05 const com::sun::star::uno::Reference <com::sun::star::sheet::XSpreadsheet>& xTable, 243 //UNUSED2008-05 const sal_Int32 nCol, const sal_Int32 nRow, 244 //UNUSED2008-05 com::sun::star::table::CellRangeAddress& aCellAddress, sal_Bool& bIsFirst) const; 245 sal_Bool IsMatrix (const ScAddress& aCell, 246 com::sun::star::table::CellRangeAddress& aCellAddress, sal_Bool& bIsFirst) const; 247 GetCellStylesPropertySetMapper()248 UniReference < XMLPropertySetMapper > GetCellStylesPropertySetMapper() { return xCellStylesPropertySetMapper; } GetTableStylesPropertySetMapper()249 UniReference < XMLPropertySetMapper > GetTableStylesPropertySetMapper() { return xTableStylesPropertySetMapper; } 250 251 void SetSourceStream( const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xNewStream ); 252 253 void GetChangeTrackViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); 254 virtual void GetViewSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); 255 virtual void GetConfigurationSettings(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps); 256 257 virtual void exportAnnotationMeta( const com::sun::star::uno::Reference < com::sun::star::drawing::XShape >& xShape); 258 259 void CreateSharedData(const sal_Int32 nTableCount); SetSharedData(ScMySharedData * pTemp)260 void SetSharedData(ScMySharedData* pTemp) { pSharedData = pTemp; } GetSharedData()261 ScMySharedData* GetSharedData() { return pSharedData; } 262 XMLNumberFormatAttributesExportHelper* GetNumberFormatAttributesExportHelper(); 263 264 // Export the document. 265 virtual sal_uInt32 exportDoc( enum ::xmloff::token::XMLTokenEnum eClass = ::xmloff::token::XML_TOKEN_INVALID ); 266 267 // XExporter 268 virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 269 270 // XFilter 271 virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor ) throw(::com::sun::star::uno::RuntimeException); 272 virtual void SAL_CALL cancel() throw(::com::sun::star::uno::RuntimeException); 273 274 // XInitialization 275 virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); 276 277 // XServiceInfo 278 virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); 279 virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); 280 virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); 281 282 // XUnoTunnel 283 virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException); 284 285 virtual void DisposingModel(); 286 }; 287 288 #endif 289 290