diff options
Diffstat (limited to 'oox/source/xls/worksheetfragment.cxx')
-rw-r--r-- | oox/source/xls/worksheetfragment.cxx | 104 |
1 files changed, 47 insertions, 57 deletions
diff --git a/oox/source/xls/worksheetfragment.cxx b/oox/source/xls/worksheetfragment.cxx index 4867c7c350c1..0b57d2621331 100644 --- a/oox/source/xls/worksheetfragment.cxx +++ b/oox/source/xls/worksheetfragment.cxx @@ -37,12 +37,14 @@ #include "oox/xls/commentsfragment.hxx" #include "oox/xls/condformatcontext.hxx" #include "oox/xls/drawingfragment.hxx" +#include "oox/xls/drawingmanager.hxx" #include "oox/xls/externallinkbuffer.hxx" #include "oox/xls/pagesettings.hxx" #include "oox/xls/pivottablefragment.hxx" #include "oox/xls/querytablefragment.hxx" #include "oox/xls/scenariobuffer.hxx" #include "oox/xls/scenariocontext.hxx" +#include "oox/xls/sheetdatabuffer.hxx" #include "oox/xls/sheetdatacontext.hxx" #include "oox/xls/tablefragment.hxx" #include "oox/xls/viewsettings.hxx" @@ -123,32 +125,18 @@ ContextHandlerRef DataValidationsContext::onCreateContext( sal_Int32 nElement, c return 0; } -namespace { - -ApiTokenSequence lclImportDataValFormula( FormulaParser& rParser, const OUString& rFormula, const CellAddress& rBaseAddress ) -{ - TokensFormulaContext aContext( true, false ); - aContext.setBaseAddress( rBaseAddress ); - rParser.importFormula( aContext, rFormula ); - return aContext.getTokens(); -} - -} // namespace - void DataValidationsContext::onCharacters( const OUString& rChars ) { if( mxValModel.get() ) switch( getCurrentElement() ) { case XLS_TOKEN( formula1 ): - mxValModel->maTokens1 = lclImportDataValFormula( - getFormulaParser(), rChars, mxValModel->maRanges.getBaseAddress() ); + mxValModel->maTokens1 = getFormulaParser().importFormula( mxValModel->maRanges.getBaseAddress(), rChars ); // process string list of a list validation (convert to list of string tokens) if( mxValModel->mnType == XML_list ) getFormulaParser().convertStringToStringList( mxValModel->maTokens1, ',', true ); break; case XLS_TOKEN( formula2 ): - mxValModel->maTokens2 = lclImportDataValFormula( - getFormulaParser(), rChars, mxValModel->maRanges.getBaseAddress() ); + mxValModel->maTokens2 = getFormulaParser().importFormula( mxValModel->maRanges.getBaseAddress(), rChars ); break; } } @@ -212,12 +200,9 @@ void DataValidationsContext::importDataValidation( SequenceInputStream& rStrm ) // condition formula(s) FormulaParser& rParser = getFormulaParser(); - TokensFormulaContext aContext( true, false ); - aContext.setBaseAddress( aModel.maRanges.getBaseAddress() ); - rParser.importFormula( aContext, rStrm ); - aModel.maTokens1 = aContext.getTokens(); - rParser.importFormula( aContext, rStrm ); - aModel.maTokens2 = aContext.getTokens(); + CellAddress aBaseAddr = aModel.maRanges.getBaseAddress(); + aModel.maTokens1 = rParser.importFormula( aBaseAddr, FORMULATYPE_VALIDATION, rStrm ); + aModel.maTokens2 = rParser.importFormula( aBaseAddr, FORMULATYPE_VALIDATION, rStrm ); // process string list of a list validation (convert to list of string tokens) if( (aModel.mnType == XML_list) && getFlag( nFlags, BIFF_DATAVAL_STRINGLIST ) ) rParser.convertStringToStringList( aModel.maTokens1, ',', true ); @@ -228,9 +213,8 @@ void DataValidationsContext::importDataValidation( SequenceInputStream& rStrm ) // ============================================================================ -WorksheetFragment::WorksheetFragment( const WorkbookHelper& rHelper, - const OUString& rFragmentPath, const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ) : - WorksheetFragmentBase( rHelper, rFragmentPath, rxProgressBar, eSheetType, nSheet ) +WorksheetFragment::WorksheetFragment( const WorksheetHelper& rHelper, const OUString& rFragmentPath ) : + WorksheetFragmentBase( rHelper, rFragmentPath ) { // import data tables related to this worksheet RelationsRef xTableRels = getRelations().getRelationsFromType( CREATE_OFFICEDOC_RELATION_TYPE( "table" ) ); @@ -541,14 +525,14 @@ void WorksheetFragment::importSheetFormatPr( const AttributeList& rAttribs ) void WorksheetFragment::importCol( const AttributeList& rAttribs ) { ColumnModel aModel; - aModel.mnFirstCol = rAttribs.getInteger( XML_min, -1 ); - aModel.mnLastCol = rAttribs.getInteger( XML_max, -1 ); - aModel.mfWidth = rAttribs.getDouble( XML_width, 0.0 ); - aModel.mnXfId = rAttribs.getInteger( XML_style, -1 ); - aModel.mnLevel = rAttribs.getInteger( XML_outlineLevel, 0 ); - aModel.mbShowPhonetic = rAttribs.getBool( XML_phonetic, false ); - aModel.mbHidden = rAttribs.getBool( XML_hidden, false ); - aModel.mbCollapsed = rAttribs.getBool( XML_collapsed, false ); + aModel.maRange.mnFirst = rAttribs.getInteger( XML_min, -1 ); + aModel.maRange.mnLast = rAttribs.getInteger( XML_max, -1 ); + aModel.mfWidth = rAttribs.getDouble( XML_width, 0.0 ); + aModel.mnXfId = rAttribs.getInteger( XML_style, -1 ); + aModel.mnLevel = rAttribs.getInteger( XML_outlineLevel, 0 ); + aModel.mbShowPhonetic = rAttribs.getBool( XML_phonetic, false ); + aModel.mbHidden = rAttribs.getBool( XML_hidden, false ); + aModel.mbCollapsed = rAttribs.getBool( XML_collapsed, false ); // set column properties in the current sheet setColumnModel( aModel ); } @@ -557,7 +541,7 @@ void WorksheetFragment::importMergeCell( const AttributeList& rAttribs ) { CellRangeAddress aRange; if( getAddressConverter().convertToCellRange( aRange, rAttribs.getString( XML_ref, OUString() ), getSheetIndex(), true, true ) ) - setMergedRange( aRange ); + getSheetData().setMergedRange( aRange ); } void WorksheetFragment::importHyperlink( const AttributeList& rAttribs ) @@ -659,11 +643,11 @@ void WorksheetFragment::importCol( SequenceInputStream& rStrm ) sal_Int32 nWidth; sal_uInt16 nFlags; - rStrm >> aModel.mnFirstCol >> aModel.mnLastCol >> nWidth >> aModel.mnXfId >> nFlags; + rStrm >> aModel.maRange.mnFirst >> aModel.maRange.mnLast >> nWidth >> aModel.mnXfId >> nFlags; // column indexes are 0-based in BIFF12, but ColumnModel expects 1-based - ++aModel.mnFirstCol; - ++aModel.mnLastCol; + ++aModel.maRange.mnFirst; + ++aModel.maRange.mnLast; // width is stored as 1/256th of a character in BIFF12, convert to entire character aModel.mfWidth = static_cast< double >( nWidth ) / 256.0; // equal flags in all BIFFs @@ -681,7 +665,7 @@ void WorksheetFragment::importMergeCell( SequenceInputStream& rStrm ) rStrm >> aBinRange; CellRangeAddress aRange; if( getAddressConverter().convertToCellRange( aRange, aBinRange, getSheetIndex(), true, true ) ) - setMergedRange( aRange ); + getSheetData().setMergedRange( aRange ); } void WorksheetFragment::importHyperlink( SequenceInputStream& rStrm ) @@ -752,9 +736,8 @@ void WorksheetFragment::importEmbeddedOleData( StreamDataSequence& orEmbeddedDat // ============================================================================ -BiffWorksheetFragment::BiffWorksheetFragment( const BiffWorkbookFragmentBase& rParent, - const ISegmentProgressBarRef& rxProgressBar, WorksheetType eSheetType, sal_Int16 nSheet ) : - BiffWorksheetFragmentBase( rParent, rxProgressBar, eSheetType, nSheet ) +BiffWorksheetFragment::BiffWorksheetFragment( const WorksheetHelper& rHelper, const BiffWorkbookFragmentBase& rParent ) : + BiffWorksheetFragmentBase( rHelper, rParent ) { } @@ -775,6 +758,7 @@ bool BiffWorksheetFragment::importFragment() SheetViewSettings& rSheetViewSett = getSheetViewSettings(); CondFormatBuffer& rCondFormats = getCondFormats(); PageSettings& rPageSett = getPageSettings(); + BiffSheetDrawing& rDrawing = getBiffDrawing(); // process all record in this sheet fragment BiffInputStream& rStrm = getInputStream(); @@ -806,6 +790,7 @@ bool BiffWorksheetFragment::importFragment() case BIFF_ID_HORPAGEBREAKS: importPageBreaks( rStrm, true ); break; case BIFF_ID_ITERATION: rWorkbookSett.importIteration( rStrm ); break; case BIFF_ID_LEFTMARGIN: rPageSett.importLeftMargin( rStrm ); break; + case BIFF_ID_NOTE: importNote( rStrm ); break; case BIFF_ID_PANE: rSheetViewSett.importPane( rStrm ); break; case BIFF_ID_PASSWORD: rWorksheetSett.importPassword( rStrm ); break; case BIFF_ID_PRINTGRIDLINES: rPageSett.importPrintGridLines( rStrm ); break; @@ -835,13 +820,13 @@ bool BiffWorksheetFragment::importFragment() case BIFF_ID_DEFCOLWIDTH: importDefColWidth( rStrm ); break; case BIFF3_ID_DEFROWHEIGHT: importDefRowHeight( rStrm ); break; case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; + case BIFF_ID_OBJ: rDrawing.importObj( rStrm ); break; case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; case BIFF_ID_SAVERECALC: rWorkbookSett.importSaveRecalc( rStrm ); break; case BIFF_ID_SHEETPR: rWorksheetSett.importSheetPr( rStrm ); break; case BIFF_ID_UNCALCED: rWorkbookSett.importUncalced( rStrm ); break; case BIFF_ID_VCENTER: rPageSett.importVerCenter( rStrm ); break; case BIFF3_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break; - } break; @@ -850,6 +835,7 @@ bool BiffWorksheetFragment::importFragment() case BIFF_ID_COLINFO: importColInfo( rStrm ); break; case BIFF3_ID_DEFROWHEIGHT: importDefRowHeight( rStrm ); break; case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; + case BIFF_ID_OBJ: rDrawing.importObj( rStrm ); break; case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; case BIFF_ID_SAVERECALC: rWorkbookSett.importSaveRecalc( rStrm ); break; @@ -868,6 +854,7 @@ bool BiffWorksheetFragment::importFragment() case BIFF3_ID_DEFROWHEIGHT: importDefRowHeight( rStrm ); break; case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break; case BIFF_ID_MERGEDCELLS: importMergedCells( rStrm ); break; // #i62300# also in BIFF5 + case BIFF_ID_OBJ: rDrawing.importObj( rStrm ); break; case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; case BIFF_ID_PTDEFINITION: importPTDefinition( rStrm ); break; @@ -895,6 +882,7 @@ bool BiffWorksheetFragment::importFragment() case BIFF_ID_HYPERLINK: importHyperlink( rStrm ); break; case BIFF_ID_LABELRANGES: importLabelRanges( rStrm ); break; case BIFF_ID_MERGEDCELLS: importMergedCells( rStrm ); break; + case BIFF_ID_OBJ: rDrawing.importObj( rStrm ); break; case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( rStrm ); break; case BIFF_ID_PAGESETUP: rPageSett.importPageSetup( rStrm ); break; case BIFF_ID_PHONETICPR: rWorksheetSett.importPhoneticPr( rStrm ); break; @@ -957,15 +945,15 @@ void BiffWorksheetFragment::importColInfo( BiffInputStream& rStrm ) ColumnModel aModel; // column indexes are 0-based in BIFF, but ColumnModel expects 1-based - aModel.mnFirstCol = static_cast< sal_Int32 >( nFirstCol ) + 1; - aModel.mnLastCol = static_cast< sal_Int32 >( nLastCol ) + 1; + aModel.maRange.mnFirst = static_cast< sal_Int32 >( nFirstCol ) + 1; + aModel.maRange.mnLast = static_cast< sal_Int32 >( nLastCol ) + 1; // width is stored as 1/256th of a character in BIFF, convert to entire character - aModel.mfWidth = static_cast< double >( nWidth ) / 256.0; - aModel.mnXfId = nXfId; - aModel.mnLevel = extractValue< sal_Int32 >( nFlags, 8, 3 ); - aModel.mbShowPhonetic = getFlag( nFlags, BIFF_COLINFO_SHOWPHONETIC ); - aModel.mbHidden = getFlag( nFlags, BIFF_COLINFO_HIDDEN ); - aModel.mbCollapsed = getFlag( nFlags, BIFF_COLINFO_COLLAPSED ); + aModel.mfWidth = static_cast< double >( nWidth ) / 256.0; + aModel.mnXfId = nXfId; + aModel.mnLevel = extractValue< sal_Int32 >( nFlags, 8, 3 ); + aModel.mbShowPhonetic = getFlag( nFlags, BIFF_COLINFO_SHOWPHONETIC ); + aModel.mbHidden = getFlag( nFlags, BIFF_COLINFO_HIDDEN ); + aModel.mbCollapsed = getFlag( nFlags, BIFF_COLINFO_COLLAPSED ); // set column properties in the current sheet setColumnModel( aModel ); } @@ -985,8 +973,8 @@ void BiffWorksheetFragment::importColWidth( BiffInputStream& rStrm ) ColumnModel aModel; // column indexes are 0-based in BIFF, but ColumnModel expects 1-based - aModel.mnFirstCol = static_cast< sal_Int32 >( nFirstCol ) + 1; - aModel.mnLastCol = static_cast< sal_Int32 >( nLastCol ) + 1; + aModel.maRange.mnFirst = static_cast< sal_Int32 >( nFirstCol ) + 1; + aModel.maRange.mnLast = static_cast< sal_Int32 >( nLastCol ) + 1; // width is stored as 1/256th of a character in BIFF, convert to entire character aModel.mfWidth = static_cast< double >( nWidth ) / 256.0; // set column properties in the current sheet @@ -1041,10 +1029,7 @@ ApiTokenSequence lclReadDataValFormula( BiffInputStream& rStrm, FormulaParser& r { sal_uInt16 nFmlaSize = rStrm.readuInt16(); rStrm.skip( 2 ); - // enable NUL characters, string list is single tStr token with NUL separators - TokensFormulaContext aContext( true, false, true ); - rParser.importFormula( aContext, rStrm, &nFmlaSize ); - return aContext.getTokens(); + return rParser.importFormula( CellAddress(), FORMULATYPE_VALIDATION, rStrm, &nFmlaSize ); } } // namespace @@ -1163,7 +1148,12 @@ void BiffWorksheetFragment::importMergedCells( BiffInputStream& rStrm ) ApiCellRangeList aRanges; getAddressConverter().convertToCellRangeList( aRanges, aBiffRanges, getSheetIndex(), true ); for( ApiCellRangeList::const_iterator aIt = aRanges.begin(), aEnd = aRanges.end(); aIt != aEnd; ++aIt ) - setMergedRange( *aIt ); + getSheetData().setMergedRange( *aIt ); +} + +void BiffWorksheetFragment::importNote( BiffInputStream& rStrm ) +{ + getComments().createComment()->importNote( rStrm ); } void BiffWorksheetFragment::importPageBreaks( BiffInputStream& rStrm, bool bRowBreak ) |