in main/oox/source/xls/worksheetfragment.cxx [745:928]
bool BiffWorksheetFragment::importFragment()
{
// initial processing in base class WorksheetHelper
initializeWorksheetImport();
// create a SheetDataContext object that implements cell import
BiffSheetDataContext aSheetData( *this );
WorkbookSettings& rWorkbookSett = getWorkbookSettings();
WorksheetSettings& rWorksheetSett = getWorksheetSettings();
SheetViewSettings& rSheetViewSett = getSheetViewSettings();
CondFormatBuffer& rCondFormats = getCondFormats();
PageSettings& rPageSett = getPageSettings();
BiffSheetDrawing& rDrawing = getBiffDrawing();
// process all record in this sheet fragment
BiffInputStream& rStrm = getInputStream();
while( rStrm.startNextRecord() && (rStrm.getRecId() != BIFF_ID_EOF) )
{
if( BiffHelper::isBofRecord( rStrm ) )
{
// skip unknown embedded fragments (BOF/EOF blocks)
skipFragment();
}
else
{
// cache base stream position to detect if record is already processed
sal_Int64 nStrmPos = rStrm.tellBase();
sal_uInt16 nRecId = rStrm.getRecId();
switch( nRecId )
{
// records in all BIFF versions
case BIFF_ID_BOTTOMMARGIN: rPageSett.importBottomMargin( rStrm ); break;
case BIFF_ID_CALCCOUNT: rWorkbookSett.importCalcCount( rStrm ); break;
case BIFF_ID_CALCMODE: rWorkbookSett.importCalcMode( rStrm ); break;
case BIFF_ID_DEFCOLWIDTH: importDefColWidth( rStrm ); break;
case BIFF_ID_DELTA: rWorkbookSett.importDelta( rStrm ); break;
case BIFF2_ID_DIMENSION: importDimension( rStrm ); break;
case BIFF3_ID_DIMENSION: importDimension( rStrm ); break;
case BIFF_ID_FOOTER: rPageSett.importFooter( rStrm ); break;
case BIFF_ID_HEADER: rPageSett.importHeader( rStrm ); break;
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;
case BIFF_ID_PRINTHEADERS: rPageSett.importPrintHeaders( rStrm ); break;
case BIFF_ID_PROTECT: rWorksheetSett.importProtect( rStrm ); break;
case BIFF_ID_REFMODE: rWorkbookSett.importRefMode( rStrm ); break;
case BIFF_ID_RIGHTMARGIN: rPageSett.importRightMargin( rStrm ); break;
case BIFF_ID_SELECTION: rSheetViewSett.importSelection( rStrm ); break;
case BIFF_ID_TOPMARGIN: rPageSett.importTopMargin( rStrm ); break;
case BIFF_ID_VERPAGEBREAKS: importPageBreaks( rStrm, false ); break;
// BIFF specific records
default: switch( getBiff() )
{
case BIFF2: switch( nRecId )
{
case BIFF_ID_COLUMNDEFAULT: importColumnDefault( rStrm ); break;
case BIFF_ID_COLWIDTH: importColWidth( rStrm ); break;
case BIFF2_ID_DEFROWHEIGHT: importDefRowHeight( rStrm ); break;
case BIFF2_ID_WINDOW2: rSheetViewSett.importWindow2( rStrm ); break;
}
break;
case BIFF3: switch( nRecId )
{
case BIFF_ID_COLINFO: importColInfo( rStrm ); break;
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;
case BIFF4: switch( nRecId )
{
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;
case BIFF_ID_SHEETPR: rWorksheetSett.importSheetPr( rStrm ); break;
case BIFF_ID_STANDARDWIDTH: importStandardWidth( 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;
case BIFF5: switch( nRecId )
{
case BIFF_ID_AUTOFILTER: importAutoFilter( rStrm ); break;
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_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;
case BIFF_ID_SAVERECALC: rWorkbookSett.importSaveRecalc( rStrm ); break;
case BIFF_ID_SCENPROTECT: rWorksheetSett.importScenProtect( rStrm ); break;
case BIFF_ID_SCL: rSheetViewSett.importScl( rStrm ); break;
case BIFF_ID_SHEETPR: rWorksheetSett.importSheetPr( rStrm ); break;
case BIFF_ID_STANDARDWIDTH: importStandardWidth( 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;
case BIFF8: switch( nRecId )
{
case BIFF_ID_AUTOFILTER: importAutoFilter( rStrm ); break;
case BIFF_ID_CFHEADER: rCondFormats.importCfHeader( rStrm ); break;
case BIFF_ID_CODENAME: rWorksheetSett.importCodeName( rStrm ); break;
case BIFF_ID_COLINFO: importColInfo( rStrm ); break;
case BIFF_ID_DATAVALIDATION: importDataValidation( rStrm ); break;
case BIFF_ID_DATAVALIDATIONS: importDataValidations( rStrm ); break;
case BIFF3_ID_DEFROWHEIGHT: importDefRowHeight( rStrm ); break;
case BIFF_ID_HCENTER: rPageSett.importHorCenter( rStrm ); break;
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;
case BIFF_ID_PICTURE: rPageSett.importPicture( rStrm ); break;
case BIFF_ID_PTDEFINITION: importPTDefinition( rStrm ); break;
case BIFF_ID_QUERYTABLE: importQueryTable( rStrm ); break;
case BIFF_ID_SAVERECALC: rWorkbookSett.importSaveRecalc( rStrm ); break;
case BIFF_ID_SCENARIOS: importScenarios( rStrm ); break;
case BIFF_ID_SCENPROTECT: rWorksheetSett.importScenProtect( rStrm ); break;
case BIFF_ID_SCL: rSheetViewSett.importScl( rStrm ); break;
case BIFF_ID_SHEETEXT: rWorksheetSett.importSheetExt( rStrm ); break;
case BIFF_ID_SHEETPR: rWorksheetSett.importSheetPr( rStrm ); break;
case BIFF_ID_SHAREDFEATHEAD: importSharedFeatHead( rStrm ); break;
case BIFF_ID_STANDARDWIDTH: importStandardWidth( 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;
case BIFF_UNKNOWN: break;
}
}
// record not processed, try record context objects
if( rStrm.tellBase() == nStrmPos )
{
// first, try cell table records
aSheetData.importRecord( rStrm );
// handle another open record context
if( mxContext.get() )
{
// if it was a cell table record, forget the other record context
if( rStrm.tellBase() == nStrmPos )
mxContext->importRecord( rStrm );
else
mxContext.reset();
}
}
}
}
// final processing in base class WorksheetHelper
finalizeWorksheetImport();
return rStrm.getRecId() == BIFF_ID_EOF;
}