summaryrefslogtreecommitdiff
path: root/oox/source/xls/worksheetfragment.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/xls/worksheetfragment.cxx')
-rw-r--r--oox/source/xls/worksheetfragment.cxx104
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 )