void WorkbookStreamObject::implDumpRecordBody()

in main/oox/source/dump/biffdumper.cxx [1598:3198]


void WorkbookStreamObject::implDumpRecordBody()
{
    BiffInputStream& rStrm = getBiffStream();
    sal_uInt16 nRecId = rStrm.getRecId();
    sal_Int64 nRecSize = rStrm.size();
    BiffType eBiff = getBiff();

    switch( nRecId )
    {
        case BIFF2_ID_ARRAY:
        case BIFF3_ID_ARRAY:
            dumpRange( "array-range", false );
            dumpHex< sal_uInt16, sal_uInt8 >( eBiff != BIFF2, "flags", "ARRAY-FLAGS" );
            if( eBiff >= BIFF5 ) dumpUnused( 4 );
            getFormulaDumper().dumpCellFormula();
        break;

        case BIFF2_ID_BLANK:
        case BIFF3_ID_BLANK:
            dumpCellHeader( nRecId == BIFF2_ID_BLANK );
        break;

        case BIFF2_ID_BOF:
        case BIFF3_ID_BOF:
        case BIFF4_ID_BOF:
        case BIFF5_ID_BOF:
            dumpHex< sal_uInt16 >( "bof-type", "BOF-BIFFTYPE" );
            dumpHex< sal_uInt16 >( "sheet-type", "BOF-SHEETTYPE" );
            if( nRecSize >= 6 )  dumpDec< sal_uInt16 >( "build-id" );
            if( nRecSize >= 8 )  dumpDec< sal_uInt16 >( "build-year" );
            if( nRecSize >= 12 ) dumpHex< sal_uInt32 >( "history-flags", "BOF-HISTORY-FLAGS" );
            if( nRecSize >= 16 ) dumpHex< sal_uInt32 >( "lowest-version", "BOF-LOWESTVERSION-FLAGS" );
            if( (eBiff == BIFF4) && (getLastRecId() != BIFF_ID_OBJ) )
                initializePerSheet();
        break;

        case BIFF_ID_BOOKEXT:
            dumpFrHeader( true, true );
            dumpDec< sal_uInt32 >( "rec-size" );
            dumpHex< sal_uInt32 >( "flags-1", "BOOKEXT-FLAGS1" );
            if( rStrm.getRemaining() > 0 ) dumpHex< sal_uInt8 >( "flags-2", "BOOKEXT-FLAGS2" );
            if( rStrm.getRemaining() > 0 ) dumpHex< sal_uInt8 >( "flags-3", "BOOKEXT-FLAGS3" );
        break;

        case BIFF2_ID_BOOLERR:
        case BIFF3_ID_BOOLERR:
            dumpCellHeader( nRecId == BIFF2_ID_BOOLERR );
            dumpBoolErr();
        break;

        case BIFF_ID_CFHEADER:
            dumpDec< sal_uInt16 >( "rule-count" );
            dumpHex< sal_uInt16 >( "flags", "CFHEADER-FLAGS" );
            dumpRange( "bounding-range" );
            dumpRangeList();
        break;

        case BIFF_ID_CFRULE:
        {
            dumpDec< sal_uInt8 >( "type", "CFRULE-TYPE" );
            dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
            sal_uInt16 nFmla1Size = dumpDec< sal_uInt16 >( "formula1-size" );
            sal_uInt16 nFmla2Size = dumpDec< sal_uInt16 >( "formula2-size" );
            dumpCfRuleProp();
            if( nFmla1Size > 0 ) getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
            if( nFmla2Size > 0 ) getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
        }
        break;

        case BIFF_ID_CFRULE12:
        {
            dumpFrHeader( true, true );
            dumpDec< sal_uInt8 >( "type", "CFRULE12-TYPE" );
            dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
            sal_uInt16 nFmla1Size = dumpDec< sal_uInt16 >( "formula1-size" );
            sal_uInt16 nFmla2Size = dumpDec< sal_uInt16 >( "formula2-size" );
            dumpDxf12Prop();
            if( nFmla1Size > 0 ) getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
            if( nFmla2Size > 0 ) getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
            getFormulaDumper().dumpNameFormula( "active-formula" );
            dumpHex< sal_uInt8 >( "flags", "CFRULE12-FLAGS" );
            dumpDec< sal_uInt16 >( "priority" );
            dumpCfRule12Param( dumpDec< sal_uInt16 >( "sub-type", "CFRULE12-SUBTYPE" ) );
        }
        break;

        case BIFF_ID_CFRULEEXT:
            dumpFrHeader( true, true );
            dumpBool< sal_uInt32 >( "cfrule12-follows" );
            dumpDec< sal_uInt16 >( "cfheader-id" );
            if( rStrm.getRemaining() >= 25 )
            {
                dumpDec< sal_uInt16 >( "cfrule-idx" );
                dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
                sal_uInt8 nSubType = dumpDec< sal_uInt8 >( "sub-type", "CFRULE12-SUBTYPE" );
                dumpDec< sal_uInt16 >( "priority" );
                dumpHex< sal_uInt8 >( "flags", "CFRULEEXT-FLAGS" );
                if( dumpBoolean( "has-dxf-data" ) ) dumpDxf12Prop();
                dumpCfRule12Param( nSubType );
            }
        break;

        case BIFF_ID_CH3DDATAFORMAT:
            dumpDec< sal_uInt8 >( "base", "CH3DDATAFORMAT-BASE" );
            dumpDec< sal_uInt8 >( "top", "CH3DDATAFORMAT-TOP" );
        break;

        case BIFF_ID_CHAREAFORMAT:
            dumpColorABGR( "fg-color" );
            dumpColorABGR( "bg-color" );
            dumpPatternIdx();
            dumpHex< sal_uInt16 >( "flags", "CHAREAFORMAT-FLAGS" );
            if( eBiff == BIFF8 ) dumpColorIdx( "fg-color-idx" );
            if( eBiff == BIFF8 ) dumpColorIdx( "bg-color-idx" );
        break;

        case BIFF_ID_CHAXESSET:
            dumpDec< sal_uInt16 >( "axesset-id", "CHAXESSET-ID" );
            dumpRect< sal_Int32 >( "inner-plotarea-pos", (eBiff <= BIFF4) ? "CONV-TWIP-TO-CM" : "" );
        break;

        case BIFF_ID_CHAXIS:
            dumpDec< sal_uInt16 >( "axis-type", "CHAXIS-TYPE" );
            if( eBiff <= BIFF4 )
                dumpRect< sal_Int32 >( "position", "CONV-TWIP-TO-CM" );
            else
                dumpUnused( 16 );
        break;

        case BIFF_ID_CHBAR:
            dumpDec< sal_Int16 >( "overlap", "CONV-PERCENT-NEG" );
            dumpDec< sal_Int16 >( "gap", "CONV-PERCENT" );
            dumpHex< sal_uInt16 >( "flags", "CHBAR-FLAGS" );
        break;

        case BIFF_ID_CHCHART:
            dumpRect< sal_Int32 >( "chart-frame", "CONV-PT1616-TO-CM", FORMATTYPE_FIX );
        break;

        case BIFF_ID_CHCHART3D:
            dumpDec< sal_uInt16 >( "rotation-angle", "CONV-DEG" );
            dumpDec< sal_Int16 >( "elevation-angle", "CONV-DEG" );
            dumpDec< sal_uInt16 >( "eye-distance" );
            dumpDec< sal_uInt16 >( "relative-height", "CONV-PERCENT" );
            dumpDec< sal_uInt16 >( "relative-depth", "CONV-PERCENT" );
            dumpDec< sal_uInt16 >( "depth-gap", "CONV-PERCENT" );
            dumpHex< sal_uInt16 >( "flags", "CHCHART3D-FLAGS" );
        break;

        case BIFF_ID_CHDATAFORMAT:
            dumpDec< sal_Int16 >( "point-idx", "CHDATAFORMAT-POINTIDX" );
            dumpDec< sal_Int16 >( "series-idx" );
            if( eBiff >= BIFF5 ) dumpDec< sal_Int16 >( "format-idx", "CHDATAFORMAT-FORMATIDX" );
            if( eBiff >= BIFF5 ) dumpHex< sal_uInt16 >( "flags", "CHDATAFORMAT-FLAGS" );
        break;

        case BIFF_ID_CHDATERANGE:
            dumpDec< sal_uInt16 >( "minimum-date" );
            dumpDec< sal_uInt16 >( "maximum-date" );
            dumpDec< sal_uInt16 >( "major-unit-value" );
            dumpDec< sal_uInt16 >( "major-unit", "CHDATERANGE-UNIT" );
            dumpDec< sal_uInt16 >( "minor-unit-value" );
            dumpDec< sal_uInt16 >( "minor-unit", "CHDATERANGE-UNIT" );
            dumpDec< sal_uInt16 >( "base-unit", "CHDATERANGE-UNIT" );
            dumpDec< sal_uInt16 >( "axis-crossing-date" );
            dumpHex< sal_uInt16 >( "flags", "CHDATERANGE-FLAGS" );
        break;

        case BIFF_ID_CHECKCOMPAT:
            dumpFrHeader( true, true );
            dumpBool< sal_uInt32 >( "check-compatibility" );
        break;

        case BIFF_ID_CHESCHERFORMAT:
            dumpEmbeddedDff();
        break;

        case BIFF_ID_CHFRAME:
            dumpDec< sal_uInt16 >( "format", "CHFRAME-FORMAT" );
            dumpHex< sal_uInt16 >( "flags", "CHFRAME-FLAGS" );
        break;

        case BIFF_ID_CHFRAMEPOS:
            dumpDec< sal_uInt16 >( "tl-mode", "CHFRAMEPOS-POSMODE" );
            dumpDec< sal_uInt16 >( "br-mode", "CHFRAMEPOS-POSMODE" );
            dumpRectWithGaps< sal_Int16 >( "position", 2 );
        break;

        case BIFF_ID_CHFRBLOCKBEGIN:
            dumpFrHeader( true, false );
            dumpDec< sal_uInt16 >( "type", "CHFRBLOCK-TYPE" );
            dumpDec< sal_uInt16 >( "context" );
            dumpDec< sal_uInt16 >( "value-1" );
            dumpDec< sal_uInt16 >( "value-2" );
        break;

        case BIFF_ID_CHFRBLOCKEND:
            dumpFrHeader( true, false );
            dumpDec< sal_uInt16 >( "type", "CHFRBLOCK-TYPE" );
            if( rStrm.getRemaining() >= 6 )
                dumpUnused( 6 );
        break;

        case BIFF_ID_CHFRCATEGORYPROPS:
            dumpFrHeader( true, false );
            dumpDec< sal_uInt16 >( "label-offset", "CONV-PERCENT" );
            dumpDec< sal_uInt16 >( "alignment", "CHFRCATEGORYPROPS-ALIGN" );
            dumpHex< sal_uInt16 >( "flags", "CHFRCATEGORYPROPS-FLAGS" );
        break;

        case BIFF_ID_CHFREXTPROPS:
        {
            dumpFrHeader( true, true );
            dumpDec< sal_uInt32 >( "data-size" );
            dumpDec< sal_uInt8 >( "version" );
            dumpUnused( 1 );
            dumpDec< sal_uInt16 >( "parent", "CHFREXTPROPS-PARENT" );
            dumpChFrExtProps();
            dumpUnused( 4 );
        }
        break;

        case BIFF_ID_CHFRINFO:
        {
            dumpFrHeader( true, false );
            dumpDec< sal_uInt8 >( "creator", "CHFRINFO-APPVERSION" );
            dumpDec< sal_uInt8 >( "writer", "CHFRINFO-APPVERSION" );
            sal_uInt16 nCount = dumpDec< sal_uInt16 >( "rec-range-count" );
            mxOut->resetItemIndex();
            for( sal_uInt16 nIndex = 0; !rStrm.isEof() && (nIndex < nCount); ++nIndex )
                dumpHexPair< sal_uInt16 >( "#rec-range", '-' );
        }
        break;

        case BIFF_ID_CHFRLABELPROPS:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt16 >( "flags", "CHFRLABELPROPS-FLAGS" );
            dumpUniString( "separator", BIFF_STR_SMARTFLAGS );
        break;

        case BIFF_ID_CHFRLAYOUT:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt32 >( "checksum" );
            dumpHex< sal_uInt16 >( "flags", "CHFRLAYOUT-FLAGS" );
            dumpDec< sal_uInt16 >( "mode-x", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-y", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-w", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-h", "CHFRLAYOUT-MODE" );
            dumpRect< double >( "position" );
            dumpUnused( 2 );
        break;

        case BIFF_ID_CHFRPLOTAREALAYOUT:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt32 >( "checksum" );
            dumpHex< sal_uInt16 >( "flags", "CHFRPLOTAREALAYOUT-FLAGS" );
            dumpRect< sal_Int16 >( "position" );
            dumpDec< sal_uInt16 >( "mode-x", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-y", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-w", "CHFRLAYOUT-MODE" );
            dumpDec< sal_uInt16 >( "mode-h", "CHFRLAYOUT-MODE" );
            dumpRect< double >( "position" );
            dumpUnused( 2 );
        break;

        case BIFF_ID_CHFRSHAPEPROPS:
            dumpFrHeader( true, true );
            dumpDec< sal_uInt16 >( "context" );
            dumpUnused( 2 );
            dumpHex< sal_uInt32 >( "checksum" );
            dumpDec< sal_uInt32 >( "xml-size" );
        break;

        case BIFF_ID_CHFRTEXTPROPS:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt32 >( "checksum" );
            dumpDec< sal_uInt32 >( "xml-size" );
        break;

        case BIFF_ID_CHFRUNITPROPS:
            dumpFrHeader( true, false );
            dumpDec< sal_Int16 >( "preset", "CHFRUNITPROPS-PRESET" );
            dumpDec< double >( "unit" );
            dumpHex< sal_uInt16 >( "flags", "CHFRUNITPROPS-FLAGS" );
        break;

        case BIFF_ID_CHFRWRAPPER:
            dumpFrHeader( true, false );
        break;

        case BIFF_ID_CHLABELRANGE:
            dumpDec< sal_uInt16 >( "axis-crossing" );
            dumpDec< sal_uInt16 >( "label-frequency" );
            dumpDec< sal_uInt16 >( "tick-frequency" );
            dumpHex< sal_uInt16 >( "flags", "CHLABELRANGE-FLAGS" );
        break;

        case BIFF_ID_CHLEGEND:
            dumpRect< sal_Int32 >( "position", (eBiff <= BIFF4) ? "CONV-TWIP-TO-CM" : "" );
            dumpDec< sal_uInt8 >( "docked-pos", "CHLEGEND-DOCKPOS" );
            dumpDec< sal_uInt8 >( "spacing", "CHLEGEND-SPACING" );
            dumpHex< sal_uInt16 >( "flags", "CHLEGEND-FLAGS" );
        break;

        case BIFF_ID_CHLINEFORMAT:
            dumpColorABGR();
            dumpDec< sal_uInt16 >( "line-type", "CHLINEFORMAT-LINETYPE" );
            dumpDec< sal_Int16 >( "line-weight", "CHLINEFORMAT-LINEWEIGHT" );
            dumpHex< sal_uInt16 >( "flags", "CHLINEFORMAT-FLAGS" );
            if( eBiff == BIFF8 ) dumpColorIdx();
        break;

        case BIFF_ID_CHMARKERFORMAT:
            dumpColorABGR( "border-color" );
            dumpColorABGR( "fill-color" );
            dumpDec< sal_uInt16 >( "marker-type", "CHMARKERFORMAT-TYPE" );
            dumpHex< sal_uInt16 >( "flags", "CHMARKERFORMAT-FLAGS" );
            if( eBiff == BIFF8 ) dumpColorIdx( "border-color-idx" );
            if( eBiff == BIFF8 ) dumpColorIdx( "fill-color-idx" );
            if( eBiff == BIFF8 ) dumpDec< sal_Int32 >( "marker-size", "CONV-TWIP-TO-PT" );
        break;

        case BIFF_ID_CHOBJECTLINK:
            dumpDec< sal_uInt16 >( "link-target", "CHOBJECTLINK-TARGET" );
            dumpDec< sal_Int16 >( "series-idx" );
            dumpDec< sal_Int16 >( "point-idx", "CHOBJECTLINK-POINT" );
        break;

        case BIFF_ID_CHPICFORMAT:
            dumpDec< sal_uInt16 >( "bitmap-mode", "CHPICFORMAT-BITMAP-MODE" );
            dumpUnused( 2 );
            dumpHex< sal_uInt16 >( "flags", "CHPICFORMAT-FLAGS" );
            dumpDec< double >( "scaling-factor" );
        break;

        case BIFF_ID_CHPIE:
            dumpDec< sal_uInt16 >( "angle", "CONV-DEG" );
            if( eBiff >= BIFF5 ) dumpDec< sal_uInt16 >( "hole-size" );
            if( eBiff >= BIFF8 ) dumpHex< sal_uInt16 >( "flags", "CHPIE-FLAGS" );
        break;

        case BIFF_ID_CHPIVOTFLAGS:
            dumpRepeatedRecId();
            dumpUnused( 2 );
            dumpHex< sal_uInt16 >( "flags", "CHPIVOTFLAGS-FLAGS" );
        break;

        case BIFF8_ID_CHPIVOTREF:
            dumpRepeatedRecId();
            dumpUnused( 4 );
            dumpUniString( "ref", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_CHPLOTGROWTH:
            dumpFix< sal_Int32 >( "horizontal-growth" );
            dumpFix< sal_Int32 >( "vertical-growth" );
        break;

        case BIFF_ID_CHPROPERTIES:
            dumpHex< sal_uInt16 >( "flags", "CHPROPERTIES-FLAGS" );
            dumpDec< sal_uInt8 >( "empty-cells", "CHPROPERTIES-EMPTYCELLS" );
        break;

        case BIFF_ID_CHSCATTER:
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "bubble-size", "CONV-PERCENT" );
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "size-type", "CHSCATTER-SIZETYPE" );
            if( eBiff == BIFF8 ) dumpHex< sal_uInt16 >( "flags", "CHSCATTER-FLAGS" );
        break;

        case BIFF_ID_CHSERERRORBAR:
            dumpDec< sal_uInt8 >( "type", "CHSERERRORBAR-TYPE" );
            dumpDec< sal_uInt8 >( "source", "CHSERERRORBAR-SOURCE" );
            dumpBool< sal_uInt8 >( "draw-t-shape" );
            dumpBool< sal_uInt8 >( "draw-line" );
            dumpDec< double >( "value" );
            dumpDec< sal_uInt16 >( "custom-count" );
        break;

        case BIFF_ID_CHSERIES:
            dumpDec< sal_uInt16 >( "categories-type", "CHSERIES-TYPE" );
            dumpDec< sal_uInt16 >( "values-type", "CHSERIES-TYPE" );
            dumpDec< sal_uInt16 >( "categories-count" );
            dumpDec< sal_uInt16 >( "values-count" );
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "bubbles-type", "CHSERIES-TYPE" );
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "bubbles-count" );
        break;

        case BIFF_ID_CHSERTRENDLINE:
            switch( dumpDec< sal_uInt8 >( "type", "CHSERTRENDLINE-TYPE" ) )
            {
                case 0:     dumpDec< sal_uInt8 >( "order" );            break;
                case 4:     dumpDec< sal_uInt8 >( "average-period" );   break;
                default:    dumpUnused( 1 );
            }
            dumpDec< double >( "intercept" );
            dumpBool< sal_uInt8 >( "show-equation" );
            dumpBool< sal_uInt8 >( "show-r-sqrare" );
            dumpDec< double >( "forecast-forward" );
            dumpDec< double >( "forecast-backward" );
        break;

        case BIFF_ID_CHSOURCELINK:
            dumpDec< sal_uInt8 >( "link-target", "CHSOURCELINK-TARGET" );
            dumpDec< sal_uInt8 >( "link-type", "CHSOURCELINK-TYPE" );
            dumpHex< sal_uInt16 >( "flags", "CHSOURCELINK-FLAGS" );
            dumpFormatIdx();
            getFormulaDumper().dumpNameFormula();
        break;

        case BIFF_ID_CHSTRING:
            dumpDec< sal_uInt16 >( "text-type", "CHSTRING-TYPE" );
            dumpString( "text", BIFF_STR_8BITLENGTH, BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_CHTEXT:
            dumpDec< sal_uInt8 >( "horizontal-align", "CHTEXT-HORALIGN" );
            dumpDec< sal_uInt8 >( "vertical-align", "CHTEXT-VERALIGN" );
            dumpDec< sal_uInt16 >( "fill-mode", "CHTEXT-FILLMODE" );
            dumpColorABGR();
            dumpRect< sal_Int32 >( "position", (eBiff <= BIFF4) ? "CONV-TWIP-TO-CM" : "" );
            dumpHex< sal_uInt16 >( "flags-1", "CHTEXT-FLAGS1" );
            if( eBiff == BIFF8 ) dumpColorIdx();
            if( eBiff == BIFF8 ) dumpHex< sal_uInt16 >( "flags-2", "CHTEXT-FLAGS2" );
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "rotation", "TEXTROTATION" );
        break;

        case BIFF_ID_CHTICK:
            dumpDec< sal_uInt8 >( "major-ticks", "CHTICK-TYPE" );
            dumpDec< sal_uInt8 >( "minor-ticks", "CHTICK-TYPE" );
            dumpDec< sal_uInt8 >( "label-position", "CHTICK-LABELPOS" );
            dumpDec< sal_uInt8 >( "fill-mode", "CHTEXT-FILLMODE" );
            dumpColorABGR( "label-color" );
            dumpUnused( 16 );
            dumpHex< sal_uInt16 >( "flags", "CHTICK-FLAGS" );
            if( eBiff == BIFF8 ) dumpColorIdx( "label-color-idx" );
            if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "label-rotation", "TEXTROTATION" );
        break;

        case BIFF_ID_CHTYPEGROUP:
            dumpUnused( 16 );
            dumpHex< sal_uInt16 >( "flags", "CHTYPEGROUP-FLAGS" );
            if( eBiff >= BIFF5 ) dumpDec< sal_uInt16 >( "group-idx" );
        break;

        case BIFF_ID_CHVALUERANGE:
            dumpDec< double >( "minimum" );
            dumpDec< double >( "maximum" );
            dumpDec< double >( "major-inc" );
            dumpDec< double >( "minor-inc" );
            dumpDec< double >( "axis-crossing" );
            dumpHex< sal_uInt16 >( "flags", "CHVALUERANGE-FLAGS" );
        break;

        case BIFF_ID_CODENAME:
            dumpUniString( "codename" );
        break;

        case BIFF_ID_CODEPAGE:
            getBiffData().setTextEncoding( dumpCodePage() );
            mbHasCodePage = true;
        break;

        case BIFF_ID_COLINFO:
            dumpColRange();
            dumpDec< sal_uInt16 >( "col-width", "CONV-COLWIDTH" );
            dumpXfIdx( "xf-idx" );
            dumpHex< sal_uInt16 >( "flags", "COLINFO-FLAGS" );
            dumpUnused( 2 );
        break;

        case BIFF_ID_COLUMNDEFAULT:
            mxOut->resetItemIndex();
            for( sal_Int32 nCol = 0, nCount = dumpColRange(); nCol < nCount; ++nCol )
                dumpXfIdx( "#xf-idx", true );
            dumpUnused( 2 );
        break;

        case BIFF_ID_COLWIDTH:
            dumpColRange( EMPTY_STRING, false );
            dumpDec< sal_uInt16 >( "col-width", "CONV-COLWIDTH" );
        break;

        case BIFF_ID_COMPRESSPICS:
            dumpFrHeader( true, true );
            dumpBool< sal_uInt32 >( "recommend-compress-pics" );
        break;

        case BIFF_ID_CONNECTION:
        {
            dumpFrHeader( true, false );
            sal_uInt16 nType = dumpDec< sal_uInt16 >( "data-source-type", "CONNECTION-SOURCETYPE" );
            sal_uInt16 nFlags1 = dumpHex< sal_uInt16 >( "flags", "CONNECTION-FLAGS" );
            dumpDec< sal_uInt16 >( "param-count" );
            dumpUnused( 2 );
            dumpHex< sal_uInt16 >( "querytable-flags", "QUERYTABLESETTINGS-FLAGS" );
            switch( nType )
            {
                case 4:     dumpHex< sal_uInt16 >( "html-flags", "QUERYTABLESETTINGS-HTML-FLAGS" );     break;
                case 5:     dumpHex< sal_uInt16 >( "oledb-flags", "QUERYTABLESETTINGS-OLEDB-FLAGS" );   break;
                case 7:     dumpHex< sal_uInt16 >( "ado-flags", "QUERYTABLESETTINGS-ADO-FLAGS" );       break;
                default:    dumpUnused( 2 );
            }
            dumpDec< sal_uInt8 >( "edited-version" );
            dumpDec< sal_uInt8 >( "refreshed-version" );
            dumpDec< sal_uInt8 >( "min-refresh-version" );
            dumpDec< sal_uInt16 >( "refresh-interval", "QUERYTABLESETTINGS-INTERVAL" );
            dumpDec< sal_uInt16 >( "html-format", "QUERYTABLESETTINGS-HTMLFORMAT" );
            dumpDec< sal_Int32 >( "reconnect-type", "CONNECTION-RECONNECTTYPE" );
            dumpDec< sal_uInt8 >( "credentials", "CONNECTION-CREDENTIALS" );
            dumpUnused( 1 );
            dumpSegmentedUniString( "source-file" );
            dumpSegmentedUniString( "source-conn-file" );
            dumpSegmentedUniString( "name" );
            dumpSegmentedUniString( "description" );
            dumpSegmentedUniString( "sso-id" );
            if( nFlags1 & 0x0004 ) dumpSegmentedUniString( "table-names" );
            if( nFlags1 & 0x0010 )
            {
                break;   // TODO: parameter array structure
            }
            bool bEscape = false;
            switch( nType )
            {
                case 1:
                    dumpSegmentedUniString( "connection-string" );
                break;
                case 4:
                    dumpSegmentedUniStringArray( "urls" );
                    dumpSegmentedUniStringArray( "post-method" );
                break;
                case 5:
                    bEscape = true;
                break;
                case 6:
                    bEscape = true;
                break;
            }
            if( bEscape )
                break;
            dumpSegmentedUniStringArray( "sql-command" );
            dumpSegmentedUniStringArray( "orig-sql-command" );
            dumpSegmentedUniStringArray( "webquery-dialog-url" );
            switch( dumpDec< sal_uInt8 >( "linked-object-type", "CONNECTION-LINKEDOBJECTTYPE" ) )
            {
                case 1: dumpSegmentedUniString( "defined-name" );   break;
                case 2: dumpHex< sal_uInt16 >( "cache-id" );        break;
            }
        }
        break;
        
        case BIFF_ID_CONT:
            if( (eBiff == BIFF8) && (getLastRecId() == BIFF_ID_OBJ) )
                dumpEmbeddedDff();
        break;

        case BIFF_ID_COORDLIST:
        {
            mxOut->resetItemIndex();
            TableGuard aTabGuard( mxOut, 12, 10 );
            while( rStrm.getRemaining() >= 4 )
            {
                MultiItemsGuard aMultiGuard( mxOut );
                writeEmptyItem( "#point" );
                dumpDec< sal_uInt16 >( "x" );
                dumpDec< sal_uInt16 >( "y" );
            }
        }
        break;

        case BIFF_ID_COUNTRY:
            dumpDec< sal_uInt16 >( "ui-country", "COUNTRY" );
            dumpDec< sal_uInt16 >( "sys-country", "COUNTRY" );
        break;

        case BIFF_ID_CRN:
        {
            sal_Int32 nCol2 = dumpColIndex( "last-col-idx", false );
            sal_Int32 nCol1 = dumpColIndex( "first-col-idx", false );
            sal_Int32 nRow = dumpRowIndex( "row-idx" );
            TableGuard aTabGuard( mxOut, 14, 17 );
            for( Address aPos( nCol1, nRow ); !rStrm.isEof() && (aPos.mnCol <= nCol2); ++aPos.mnCol )
            {
                MultiItemsGuard aMultiGuard( mxOut );
                writeAddressItem( "pos", aPos );
                dumpConstValue();
            }
        }
        break;

        case BIFF_ID_DCONBINAME:
            dumpDec< sal_uInt8 >( "builtin-id", "DEFINEDNAME-BUILTINID" );
            dumpUnused( 3 );
            dumpString( "source-link", BIFF_STR_8BITLENGTH, BIFF_STR_SMARTFLAGS );
        break;

        case BIFF_ID_DCONNAME:
            dumpString( "source-name", BIFF_STR_8BITLENGTH );
            dumpString( "source-link", BIFF_STR_8BITLENGTH, BIFF_STR_SMARTFLAGS );
        break;

        case BIFF_ID_DCONREF:
            dumpRange( "source-range", false );
            dumpString( "source-link", BIFF_STR_8BITLENGTH, BIFF_STR_SMARTFLAGS );
        break;

        case BIFF2_ID_DATATABLE:
            dumpRange( "table-range", false );
            dumpBoolean( "recalc-always" );
            dumpBoolean( "row-table" );
            dumpAddress( "ref1" );
        break;

        case BIFF3_ID_DATATABLE:
            dumpRange( "table-range", false );
            dumpHex< sal_uInt16 >( "flags", "DATATABLE-FLAGS" );
            dumpAddress( "ref1" );
            dumpAddress( "ref2" );
        break;

        case BIFF2_ID_DATATABLE2:
            dumpRange( "table-range", false );
            dumpBoolean( "recalc-always" );
            dumpUnused( 1 );
            dumpAddress( "ref1" );
            dumpAddress( "ref2" );
        break;

        case BIFF_ID_DATAVALIDATION:
        {
            dumpHex< sal_uInt32 >( "flags", "DATAVALIDATION-FLAGS" );
            dumpUniString( "input-title" );
            dumpUniString( "error-title" );
            dumpUniString( "input-message" );
            dumpUniString( "error-message" );
            sal_uInt16 nFmla1Size = getFormulaDumper().dumpFormulaSize( "formula1-size" );
            dumpUnused( 2 );
            if( nFmla1Size > 0 )
                getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
            sal_uInt16 nFmla2Size = getFormulaDumper().dumpFormulaSize( "formula2-size" );
            dumpUnused( 2 );
            if( nFmla2Size > 0 )
                getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
            dumpRangeList();
        }
        break;

        case BIFF_ID_DATAVALIDATIONS:
            dumpHex< sal_uInt16 >( "flags", "DATAVALIDATIONS-FLAGS" );
            dumpDec< sal_Int32 >( "input-box-pos-x" );
            dumpDec< sal_Int32 >( "input-box-pos-y" );
            dumpDec< sal_Int32 >( "dropdown-object-id" );
            dumpDec< sal_Int32 >( "dval-entry-count" );
        break;

        case BIFF_ID_DBCELL:
            dumpDec< sal_uInt32 >( "reverse-offset-to-row" );
            mxOut->resetItemIndex();
            while( rStrm.getRemaining() >= 2 )
                dumpDec< sal_uInt16 >( "#cell-offset" );
        break;

        case BIFF_ID_DBQUERY:
            if( eBiff == BIFF8 )
            {
                if( (getLastRecId() != BIFF_ID_PCITEM_STRING) && (getLastRecId() != BIFF_ID_DBQUERY) )
                {
                    dumpHex< sal_uInt16 >( "flags", "DBQUERY-FLAGS" );
                    dumpDec< sal_uInt16 >( "sql-param-count" );
                    dumpDec< sal_uInt16 >( "command-count" );
                    dumpDec< sal_uInt16 >( "post-method-count" );
                    dumpDec< sal_uInt16 >( "server-sql-count" );
                    dumpDec< sal_uInt16 >( "odbc-connection-count" );
                }
            }
        break;

        case BIFF2_ID_DEFINEDNAME:
        case BIFF3_ID_DEFINEDNAME:
        {
            rtl_TextEncoding eTextEnc = getBiffData().getTextEncoding();
            dumpHex< sal_uInt16, sal_uInt8 >( eBiff != BIFF2, "flags", "DEFINEDNAME-FLAGS" );
            if( eBiff == BIFF2 ) dumpDec< sal_uInt8 >( "macro-type", "DEFINEDNAME-MACROTYPE-BIFF2" );
            dumpChar( "accelerator", eTextEnc );
            sal_uInt8 nNameLen = dumpDec< sal_uInt8 >( "name-len" );
            sal_uInt16 nFmlaSize = getFormulaDumper().dumpFormulaSize();
            if( eBiff >= BIFF5 )
            {
                bool bBiff8 = eBiff == BIFF8;
                if( bBiff8 ) dumpUnused( 2 ); else dumpDec< sal_uInt16 >( "externsheet-idx", "DEFINEDNAME-SHEETIDX" );
                dumpDec< sal_uInt16 >( "sheet-idx", "DEFINEDNAME-SHEETIDX" );
                sal_uInt8 nMenuLen = dumpDec< sal_uInt8 >( "menu-text-len" );
                sal_uInt8 nDescrLen = dumpDec< sal_uInt8 >( "description-text-len" );
                sal_uInt8 nHelpLen = dumpDec< sal_uInt8 >( "help-text-len" );
                sal_uInt8 nStatusLen = dumpDec< sal_uInt8 >( "statusbar-text-len" );
                writeStringItem( "name", bBiff8 ? rStrm.readUniStringBody( nNameLen, true ) : rStrm.readCharArrayUC( nNameLen, eTextEnc, true ) );
                getFormulaDumper().dumpNameFormula( EMPTY_STRING, nFmlaSize );
                if( nMenuLen > 0 ) writeStringItem( "menu-text", bBiff8 ? rStrm.readUniStringBody( nMenuLen, true ) : rStrm.readCharArrayUC( nMenuLen, eTextEnc, true ) );
                if( nDescrLen > 0 ) writeStringItem( "description-text", bBiff8 ? rStrm.readUniStringBody( nDescrLen, true ) : rStrm.readCharArrayUC( nDescrLen, eTextEnc, true ) );
                if( nHelpLen > 0 ) writeStringItem( "help-text", bBiff8 ? rStrm.readUniStringBody( nHelpLen, true ) : rStrm.readCharArrayUC( nHelpLen, eTextEnc, true ) );
                if( nStatusLen > 0 ) writeStringItem( "statusbar-text", bBiff8 ? rStrm.readUniStringBody( nStatusLen, true ) : rStrm.readCharArrayUC( nStatusLen, eTextEnc, true ) );
            }
            else
            {
                writeStringItem( "name", rStrm.readCharArrayUC( nNameLen, eTextEnc, true ) );
                getFormulaDumper().dumpNameFormula( EMPTY_STRING, nFmlaSize );
                if( eBiff == BIFF2 ) getFormulaDumper().dumpFormulaSize();
            }
        }
        break;

        case BIFF3_ID_DEFROWHEIGHT:
            dumpHex< sal_uInt16 >( "flags", "DEFROWHEIGHT-FLAGS" );
            dumpDec< sal_uInt16 >( "row-height", "CONV-TWIP-TO-PT" );
        break;

        case BIFF2_ID_DIMENSION:
        case BIFF3_ID_DIMENSION:
            dumpRange( "used-area", true, (nRecId == BIFF3_ID_DIMENSION) && (eBiff == BIFF8) );
            if( nRecId == BIFF3_ID_DIMENSION ) dumpUnused( 2 );
        break;

        case BIFF_ID_DXF:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt16 >( "flags", "DXF-FLAGS" );
            dumpDxfProp();
        break;

        case BIFF_ID_EXTERNALBOOK:
        {
            sal_uInt16 nCount = dumpDec< sal_uInt16 >( "sheet-count" );
            if( rStrm.getRemaining() == 2 )
                dumpHex< sal_uInt16 >( "special-key", "EXTERNALBOOK-KEY" );
            else
            {
                dumpString( "workbook-url" );
                mxOut->resetItemIndex();
                for( sal_uInt16 nSheet = 0; !rStrm.isEof() && (nSheet < nCount); ++nSheet )
                    dumpString( "#sheet-name" );
            }
        }
        break;

        case BIFF2_ID_EXTERNALNAME:
        case BIFF3_ID_EXTERNALNAME:
        {
            sal_uInt16 nFlags = (eBiff >= BIFF3) ? dumpHex< sal_uInt16 >( "flags", "EXTERNALNAME-FLAGS" ) : 0;
            if( eBiff >= BIFF5 )
            {
                if( getFlag< sal_uInt16 >( nFlags, 0x0010 ) )
                {
                    dumpHex< sal_uInt32 >( "storage-id" );
                }
                else
                {
                    dumpDec< sal_uInt16 >( "externsheet-idx" );
                    dumpUnused( 2 );
                }
            }
            OUString aName = dumpString( "name", BIFF_STR_8BITLENGTH, BIFF_STR_8BITLENGTH );
            if( (aName.getLength() > 0) && (aName[ 0 ] == 1) && (rStrm.getRemaining() >= 2) )
                getFormulaDumper().dumpNameFormula();
        }
        break;

        case BIFF_ID_EXTERNSHEET:
            if( eBiff == BIFF8 )
            {
                sal_uInt16 nCount = dumpDec< sal_uInt16 >( "ref-count" );
                TableGuard aTabGuard( mxOut, 10, 17, 24 );
                mxOut->resetItemIndex();
                for( sal_uInt16 nRefId = 0; !rStrm.isEof() && (nRefId < nCount); ++nRefId )
                {
                    MultiItemsGuard aMultiGuard( mxOut );
                    writeEmptyItem( "#ref" );
                    dumpDec< sal_uInt16 >( "extbook-idx" );
                    dumpDec< sal_Int16 >( "first-sheet", "EXTERNSHEET-IDX" );
                    dumpDec< sal_Int16 >( "last-sheet", "EXTERNSHEET-IDX" );
                }
            }
            else
            {
                OStringBuffer aUrl( rStrm.readByteString( false, true ) );
                if( (aUrl.getLength() > 0) && (aUrl[ 0 ] == '\x03') )
                    aUrl.append( static_cast< sal_Char >( rStrm.readuInt8() ) );
                writeStringItem( "encoded-url", OStringToOUString( aUrl.makeStringAndClear(), getBiffData().getTextEncoding() ) );
            }
        break;

        case BIFF_ID_FILEPASS:
        {
            rStrm.enableDecoder( false );
            if( eBiff == BIFF8 )
            {
                switch( dumpDec< sal_uInt16 >( "type", "FILEPASS-TYPE" ) )
                {
                    case 0:
                        dumpHex< sal_uInt16 >( "key" );
                        dumpHex< sal_uInt16 >( "verifier" );
                    break;
                    case 1:
                    {
                        sal_uInt16 nMajor = dumpDec< sal_uInt16 >( "major-version", "FILEPASS-MAJOR" );
                        dumpDec< sal_uInt16 >( "minor-version" );
                        switch( nMajor )
                        {
                            case 1:
                                dumpArray( "salt", 16 );
                                dumpArray( "verifier", 16 );
                                dumpArray( "verifier-hash", 16 );
                            break;
                        }
                    }
                    break;
                }
            }
            else
            {
                dumpHex< sal_uInt16 >( "key" );
                dumpHex< sal_uInt16 >( "verifier" );
            }
            rStrm.seekToStart();
            BiffDecoderRef xDecoder = BiffCodecHelper::implReadFilePass( rStrm, eBiff );
            if( xDecoder.get() )
                cfg().requestEncryptionData( *xDecoder );
            setBinaryOnlyMode( !xDecoder || !xDecoder->isValid() );
        }
        break;

        case BIFF_ID_FILESHARING:
            dumpBool< sal_uInt16 >( "recommend-read-only" );
            dumpHex< sal_uInt16 >( "password-hash" );
            dumpString( "password-creator", BIFF_STR_8BITLENGTH, BIFF_STR_SMARTFLAGS );
        break;

        case BIFF_ID_FILTERCOLUMN:
        {
            dumpDec< sal_uInt16 >( "column-index" );
            dumpHex< sal_uInt16 >( "flags", "FILTERCOLUMN-FLAGS" );
            sal_uInt8 nStrLen1 = dumpFilterColumnOperator( "operator-1" );
            sal_uInt8 nStrLen2 = dumpFilterColumnOperator( "operator-2" );
            bool bBiff8 = eBiff == BIFF8;
            rtl_TextEncoding eTextEnc = getBiffData().getTextEncoding();
            if( nStrLen1 > 0 ) writeStringItem( "string-1", bBiff8 ? rStrm.readUniStringBody( nStrLen1, true ) : rStrm.readCharArrayUC( nStrLen1, eTextEnc, true ) );
            if( nStrLen2 > 0 ) writeStringItem( "string-2", bBiff8 ? rStrm.readUniStringBody( nStrLen2, true ) : rStrm.readCharArrayUC( nStrLen2, eTextEnc, true ) );
        }
        break;
        
        case BIFF2_ID_FONT:
        case BIFF3_ID_FONT:
            dumpFontRec();
        break;

        case BIFF_ID_FORCEFULLCALC:
            dumpFrHeader( true, true );
            dumpBool< sal_Int32 >( "recalc-all-formulas" );
        break;

        case BIFF2_ID_FORMAT:
        case BIFF4_ID_FORMAT:
            dumpFormatRec();
        break;

        case BIFF2_ID_FORMULA:
        case BIFF3_ID_FORMULA:
        case BIFF4_ID_FORMULA:
            dumpCellHeader( eBiff == BIFF2 );
            dumpFormulaResult();
            dumpHex< sal_uInt16, sal_uInt8 >( eBiff != BIFF2, "flags", "FORMULA-FLAGS" );
            if( eBiff >= BIFF5 ) dumpUnused( 4 );
            getFormulaDumper().dumpCellFormula();
        break;

        case BIFF_ID_FOOTER:
            if( rStrm.getRemaining() > 0 )
                dumpString( "footer", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_GUTS:
            dumpDec< sal_uInt16 >( "row-outlines-width" );
            dumpDec< sal_uInt16 >( "column-outlines-height" );
            dumpDec< sal_uInt16 >( "row-levels", "GUTS-LEVELS" );
            dumpDec< sal_uInt16 >( "column-levels", "GUTS-LEVELS" );
        break;

        case BIFF_ID_HEADER:
            if( rStrm.getRemaining() > 0 )
                dumpString( "header", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_HEADERFOOTER:
        {
            dumpFrHeader( true, true );
            dumpGuid( "view-guid" );
            dumpHex< sal_uInt16 >( "flags", "HEADERFOOTER-FLAGS" );
            sal_uInt16 nEvenHLen = dumpDec< sal_uInt16 >( "even-h-len" );
            sal_uInt16 nEvenFLen = dumpDec< sal_uInt16 >( "even-f-len" );
            sal_uInt16 nFirstHLen = dumpDec< sal_uInt16 >( "first-h-len" );
            sal_uInt16 nFirstFLen = dumpDec< sal_uInt16 >( "first-f-len" );
            if( nEvenHLen > 0 ) dumpUniString( "even-h" );
            if( nEvenFLen > 0 ) dumpUniString( "even-f" );
            if( nFirstHLen > 0 ) dumpUniString( "first-h" );
            if( nFirstFLen > 0 ) dumpUniString( "first-f" );
        }
        break;

        case BIFF_ID_HYPERLINK:
            dumpRange();
            if( cfg().getStringOption( dumpGuid( "guid" ), OUString() ).equalsAscii( "StdHlink" ) )
                StdHlinkObject( *this ).dump();
        break;

        case BIFF3_ID_IMGDATA:
        case BIFF8_ID_IMGDATA:
        {
            sal_uInt16 nFormat = dumpDec< sal_uInt16 >( "image-format", "IMGDATA-FORMAT" );
            dumpDec< sal_uInt16 >( "environment", "IMGDATA-ENV" );
            dumpDec< sal_uInt32 >( "data-size" );
            if( nFormat == 9 )
            {
                writeEmptyItem( "bitmap-header" );
                IndentGuard aIndGuard( mxOut );
                if( dumpDec< sal_uInt32 >( "header-size" ) == 12 )
                {
                    dumpDec< sal_Int16 >( "width" );
                    dumpDec< sal_Int16 >( "height" );
                    dumpDec< sal_Int16 >( "planes" );
                    dumpDec< sal_Int16 >( "bit-count" );
                }
            }
        }
        break;

        case BIFF2_ID_INDEX:
        case BIFF3_ID_INDEX:
            if( eBiff <= BIFF4 )
                dumpHex< sal_uInt32 >( "first-defname-pos", "CONV-DEC" );
            else
                dumpUnused( 4 );
            dumpRowIndex( "first-row-with-cell", eBiff == BIFF8 );
            dumpRowIndex( "first-free-row", eBiff == BIFF8 );
            if( nRecId == BIFF3_ID_INDEX ) dumpHex< sal_uInt32 >( (eBiff <= BIFF4) ? "first-xf-pos" : "defcolwidth-pos", "CONV-DEC" );
            mxOut->resetItemIndex();
            while( rStrm.getRemaining() >= 4 )
                dumpHex< sal_uInt32 >( "#first-row-pos-of-block", "CONV-DEC" );
        break;

        case BIFF2_ID_INTEGER:
            dumpCellHeader( true );
            dumpDec< sal_uInt16 >( "value" );
        break;

        case BIFF2_ID_LABEL:
        case BIFF3_ID_LABEL:
        {
            bool bBiff2 = nRecId == BIFF2_ID_LABEL;
            sal_uInt16 nXfIdx = dumpCellHeader( bBiff2 );
            rtl_TextEncoding eOldTextEnc = getBiffData().getTextEncoding();
            getBiffData().setTextEncoding( getBiffData().getXfEncoding( nXfIdx ) );
            dumpString( "value", bBiff2 ? BIFF_STR_8BITLENGTH : BIFF_STR_DEFAULT );
            getBiffData().setTextEncoding( eOldTextEnc );
        }
        break;

        case BIFF_ID_LABELRANGES:
            dumpRangeList( "row-ranges" );
            dumpRangeList( "col-ranges" );
        break;

        case BIFF_ID_LABELSST:
            dumpCellHeader();
            dumpDec< sal_Int32 >( "sst-idx" );
        break;

        case BIFF_ID_MERGEDCELLS:
            mxOut->resetItemIndex();
            for( sal_uInt16 nIdx = 0, nCount = dumpDec< sal_uInt16 >( "count" ); !rStrm.isEof() && (nIdx < nCount); ++nIdx )
                dumpRange( "#range" );
        break;
        
        case BIFF_ID_MSODRAWING:
        case BIFF_ID_MSODRAWINGGROUP:
        case BIFF_ID_MSODRAWINGSEL:
            dumpEmbeddedDff();
            mbHasDff = true;
        break;

        case BIFF_ID_MTHREADSETTINGS:
            dumpFrHeader( true, true );
            dumpBool< sal_Int32 >( "multi-thread-enabled" );
            dumpBool< sal_Int32 >( "manual-thread-count" );
            dumpDec< sal_Int32 >( "thread-count" );
        break;

        case BIFF_ID_MULTBLANK:
        {
            Address aPos = dumpAddress();
            {
                TableGuard aTabGuard( mxOut, 12 );
                for( ; rStrm.getRemaining() >= 4; ++aPos.mnCol )
                {
                    MultiItemsGuard aMultiGuard( mxOut );
                    writeAddressItem( "pos", aPos );
                    dumpXfIdx();
                }
            }
            dumpColIndex( "last-col-idx" );
        }
        break;

        case BIFF_ID_MULTRK:
        {
            Address aPos = dumpAddress();
            {
                TableGuard aTabGuard( mxOut, 12, 12 );
                for( ; rStrm.getRemaining() >= 8; ++aPos.mnCol )
                {
                    MultiItemsGuard aMultiGuard( mxOut );
                    writeAddressItem( "pos", aPos );
                    dumpXfIdx();
                    dumpRk( "value" );
                }
            }
            dumpColIndex( "last-col-idx" );
        }
        break;

        case BIFF_ID_NOTE:
            dumpAddress( "anchor-cell" );
            if( eBiff == BIFF8 )
            {
                dumpHex< sal_uInt16 >( "flags", "NOTE-FLAGS" );
                dumpDec< sal_uInt16 >( "obj-id" );
                dumpUniString( "author" );
                dumpUnused( 1 );
            }
            else
            {
                sal_uInt16 nTextLen = dumpDec< sal_uInt16 >( "text-len" );
                nTextLen = ::std::min( nTextLen, static_cast< sal_uInt16 >( rStrm.getRemaining() ) );
                writeStringItem( "note-text", rStrm.readCharArrayUC( nTextLen, getBiffData().getTextEncoding(), true ) );
            }
        break;

        case BIFF_ID_NOTESOUND:
            dumpHex< sal_uInt32 >( "identifier" );
            dumpDec< sal_uInt32 >( "total-data-size" );
            dumpDec< sal_uInt32 >( "wave-data-size" );
            if( dumpDec< sal_uInt32 >( "fmt-size" ) >= 16 )
            {
                dumpDec< sal_uInt16 >( "format", "NOTESOUND-FORMAT" );
                dumpDec< sal_uInt16 >( "channels" );
                dumpDec< sal_uInt32 >( "sampling-rate" );
                dumpDec< sal_uInt32 >( "data-rate" );
                dumpDec< sal_uInt16 >( "data-block-size" );
                dumpDec< sal_uInt16 >( "bits-per-sample" );
            }
        break;
        
        case BIFF2_ID_NUMBER:
        case BIFF3_ID_NUMBER:
            dumpCellHeader( nRecId == BIFF2_ID_NUMBER );
            dumpDec< double >( "value" );
        break;

        case BIFF_ID_OBJ:
            dumpObjRec();
        break;

        case BIFF_ID_OLESIZE:
            dumpUnused( 2 );
            dumpRange( "visible-range", false );
        break;
        
        case BIFF_ID_PAGELAYOUTVIEW:
            dumpFrHeader( true, true );
            dumpDec< sal_uInt16 >( "scaling", "CONV-PERCENT" );
            dumpHex< sal_uInt16 >( "flags", "PAGELAYOUTVIEW-FLAGS" );
        break;

        case BIFF_ID_PAGESETUP:
            dumpDec< sal_uInt16 >( "paper-size", "PAGESETUP-PAPERSIZE" );
            dumpDec< sal_uInt16 >( "scaling", "CONV-PERCENT" );
            dumpDec< sal_uInt16 >( "first-page" );
            dumpDec< sal_uInt16 >( "scale-to-width", "PAGESETUP-SCALETOPAGES" );
            dumpDec< sal_uInt16 >( "scale-to-height", "PAGESETUP-SCALETOPAGES" );
            dumpHex< sal_uInt16 >( "flags", "PAGESETUP-FLAGS" );
            if( eBiff >= BIFF5 )
            {
                dumpDec< sal_uInt16 >( "horizontal-res", "PAGESETUP-DPI" );
                dumpDec< sal_uInt16 >( "vertical-res", "PAGESETUP-DPI" );
                dumpDec< double >( "header-margin", "CONV-INCH-TO-CM" );
                dumpDec< double >( "footer-margin", "CONV-INCH-TO-CM" );
                dumpDec< sal_uInt16 >( "copies" );
            }
        break;

        case BIFF_ID_PALETTE:
            mxOut->resetItemIndex( 8 );
            for( sal_uInt16 nIdx = 0, nCount = dumpDec< sal_uInt16 >( "count" ); !rStrm.isEof() && (nIdx < nCount); ++nIdx )
            {
                OUStringBuffer aColorName;
                StringHelper::appendHex( aColorName, dumpColorABGR( "#color" ) );
                mxColors->setName( nIdx + 8, aColorName.makeStringAndClear() );
            }
        break;

        case BIFF_ID_PANE:
            dumpDec< sal_uInt16 >( "x-pos", "CONV-TWIP-TO-CM" );
            dumpDec< sal_uInt16 >( "y-pos", "CONV-TWIP-TO-CM" );
            dumpAddress( "first-visible-cell" );
            dumpDec< sal_uInt8 >( "active-pane", "PANE-ID" );
        break;

        case BIFF_ID_PCITEM_STRING:
            dumpString( "value" );
        break;

        case BIFF_ID_PHONETICPR:
            dumpDec< sal_uInt16 >( "font-id", "FONTNAMES" );
            dumpHex< sal_uInt16 >( "flags", "PHONETICPR-FLAGS" );
            dumpRangeList( "show-phonetic" );
        break;

        case BIFF_ID_PROJEXTSHEET:
            dumpDec< sal_uInt8 >( "sheet-type", "PROJEXTSHEET-TYPE" );
            dumpUnused( 1 );
            dumpByteString( "sheet-link", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_PTDATAFIELD:
            dumpDec< sal_Int16 >( "field" );
            dumpDec< sal_uInt16 >( "subtotal", "PTDATAFIELD-SUBTOTAL" );
            dumpDec< sal_uInt16 >( "show-data-as", "PTDATAFIELD-SHOWDATAAS" );
            dumpDec< sal_Int16 >( "base-field" );
            dumpDec< sal_Int16 >( "base-item", "PTDATAFIELD-BASEITEM" );
            dumpFormatIdx();
            dumpPivotString( "name" );
        break;

        case BIFF_ID_PTDEFINITION:
        {
            dumpRange( "output-range" );
            dumpRowIndex( "first-header-row-idx" );
            dumpAddress( "first-data-pos" );
            dumpDec< sal_uInt16 >( "cache-idx" );
            dumpUnused( 2 );
            dumpDec< sal_uInt16 >( "default-data-axis", "PTFIELD-AXISTYPE" );
            dumpDec< sal_Int16 >( "default-data-pos", "PTDEFINITION-DATAFIELD-POS" );
            dumpDec< sal_uInt16 >( "field-count" );
            mnPTRowFields = dumpDec< sal_uInt16 >( "row-field-count" );
            mnPTColFields = dumpDec< sal_uInt16 >( "column-field-count" );
            dumpDec< sal_uInt16 >( "page-field-count" );
            dumpDec< sal_uInt16 >( "data-field-count" );
            dumpDec< sal_uInt16 >( "data-row-count" );
            dumpDec< sal_uInt16 >( "data-column-count" );
            dumpHex< sal_uInt16 >( "flags", "PTDEFINITION-FLAGS" );
            dumpDec< sal_uInt16 >( "auto-format-idx" );
            sal_uInt16 nTabNameLen = dumpDec< sal_uInt16 >( "table-name-len" );
            sal_uInt16 nDataNameLen = dumpDec< sal_uInt16 >( "data-name-len" );
            dumpPivotString( "table-name", nTabNameLen );
            dumpPivotString( "data-name", nDataNameLen );
            mnPTRowColItemsIdx = 0;
        }
        break;

        case BIFF_ID_PTDEFINITION2:
        {
            dumpDec< sal_uInt16 >( "format-rec-count" );
            sal_uInt16 nErrCaptLen = dumpDec< sal_uInt16 >( "error-caption-len" );
            sal_uInt16 nMissCaptLen = dumpDec< sal_uInt16 >( "missing-caption-len" );
            sal_uInt16 nTagLen = dumpDec< sal_uInt16 >( "tag-len" );
            dumpDec< sal_uInt16 >( "select-rec-count" );
            dumpDec< sal_uInt16 >( "page-rows" );
            dumpDec< sal_uInt16 >( "page-cols" );
            dumpHex< sal_uInt32 >( "flags", "PTDEFINITION2-FLAGS" );
            sal_uInt16 nPageStyleLen = dumpDec< sal_uInt16 >( "page-field-style-len" );
            sal_uInt16 nTabStyleLen = dumpDec< sal_uInt16 >( "pivot-table-style-len" );
            sal_uInt16 nVacStyleLen = dumpDec< sal_uInt16 >( "vacated-style-len" );
            dumpPivotString( "error-caption", nErrCaptLen );
            dumpPivotString( "missing-caption", nMissCaptLen );
            dumpPivotString( "tag", nTagLen );
            dumpPivotString( "page-field-style", nPageStyleLen );
            dumpPivotString( "pivot-table-style", nTabStyleLen );
            dumpPivotString( "vacated-style", nVacStyleLen );
        }
        break;

        case BIFF_ID_PTFIELD:
            dumpDec< sal_uInt16 >( "axis-type", "PTFIELD-AXISTYPE" );
            dumpDec< sal_uInt16 >( "subtotal-count" );
            dumpHex< sal_uInt16 >( "subtotals", "PTFIELD-SUBTOTALS" );
            dumpDec< sal_uInt16 >( "item-count" );
            dumpPivotString( "field-name" );
        break;

        case BIFF_ID_PTFIELD2:
            dumpHex< sal_uInt32 >( "flags", "PTFIELD2-FLAGS" );
            dumpDec< sal_Int16 >( "autosort-basefield-idx" );
            dumpDec< sal_Int16 >( "autoshow-basefield-idx" );
            dumpFormatIdx();
            if( rStrm.getRemaining() >= 2 )
            {
                sal_uInt16 nFuncNameLen = dumpDec< sal_uInt16 >( "subtotal-func-name-len" );
                dumpUnused( 8 );
                dumpPivotString( "subtotal-func-name", nFuncNameLen );
            }
        break;

        case BIFF_ID_PTFITEM:
            dumpDec< sal_uInt16 >( "item-type", "PTFITEM-ITEMTYPE" );
            dumpHex< sal_uInt16 >( "flags", "PTFITEM-FLAGS" );
            dumpDec< sal_Int16 >( "cache-idx", "PTFITEM-CACHEIDX" );
            dumpPivotString( "item-name" );
        break;

        case BIFF_ID_PTPAGEFIELDS:
        {
            mxOut->resetItemIndex();
            TableGuard aTabGuard( mxOut, 17, 17, 17 );
            while( rStrm.getRemaining() >= 6 )
            {
                writeEmptyItem( "#page-field" );
                MultiItemsGuard aMultiGuard( mxOut );
                IndentGuard aIndGuard( mxOut );
                dumpDec< sal_Int16 >( "base-field" );
                dumpDec< sal_Int16 >( "item", "PTPAGEFIELDS-ITEM" );
                dumpDec< sal_uInt16 >( "dropdown-obj-id" );
            }
        }
        break;

        case BIFF_ID_PTROWCOLFIELDS:
            mxOut->resetItemIndex();
            for( sal_Int64 nIdx = 0, nCount = rStrm.getRemaining() / 2; nIdx < nCount; ++nIdx )
                dumpDec< sal_Int16 >( "#field-idx" );
        break;

        case BIFF_ID_PTROWCOLITEMS:
            if( mnPTRowColItemsIdx < 2 )
            {
                sal_uInt16 nCount = (mnPTRowColItemsIdx == 0) ? mnPTRowFields : mnPTColFields;
                sal_Int64 nLineSize = 8 + 2 * nCount;
                mxOut->resetItemIndex();
                while( rStrm.getRemaining() >= nLineSize )
                {
                    writeEmptyItem( "#line-data" );
                    IndentGuard aIndGuard( mxOut );
                    MultiItemsGuard aMultiGuard( mxOut );
                    dumpDec< sal_uInt16 >( "ident-count" );
                    dumpDec< sal_uInt16 >( "item-type", "PTROWCOLITEMS-ITEMTYPE" );
                    dumpDec< sal_uInt16 >( "used-count" );
                    dumpHex< sal_uInt16 >( "flags", "PTROWCOLITEMS-FLAGS" );
                    OUStringBuffer aItemList;
                    for( sal_uInt16 nIdx = 0; nIdx < nCount; ++nIdx )
                        StringHelper::appendToken( aItemList, mxStrm->readInt16() );
                    writeInfoItem( "item-idxs", aItemList.makeStringAndClear() );
                }
                ++mnPTRowColItemsIdx;
            }
        break;

        case BIFF_ID_QUERYTABLE:
            dumpHex< sal_uInt16 >( "flags", "QUERYTABLE-FLAGS" );
            dumpDec< sal_uInt16 >( "autoformat-id" );
            dumpHex< sal_uInt16 >( "autoformat-flags", "QUERYTABLE-AUTOFORMAT-FLAGS" );
            dumpUnused( 4 );
            dumpUniString( "defined-name" );
            dumpUnused( 2 );
        break;
        
        case BIFF_ID_QUERYTABLEREFRESH:
        {
            dumpFrHeader( true, false );
            bool bPivot = dumpBool< sal_uInt16 >( "pivot-table" );
            dumpHex< sal_uInt16 >( "flags", "QUERYTABLEREFRESH-FLAGS" );
            dumpHex< sal_uInt32 >( bPivot ? "pivottable-flags" : "querytable-flags", bPivot ? "QUERYTABLEREFRESH-PTFLAGS" : "QUERYTABLEREFRESH-QTFLAGS" );
            dumpDec< sal_uInt8 >( "refreshed-version" );
            dumpDec< sal_uInt8 >( "min-refresh-version" );
            dumpUnused( 2 );
            dumpUniString( "table-name" );
            dumpUnused( 2 );
        }
        break;

        case BIFF_ID_QUERYTABLESETTINGS:
        {
            dumpFrHeader( true, false );
            sal_uInt16 nType = dumpDec< sal_uInt16 >( "data-source-type", "CONNECTION-SOURCETYPE" );
            dumpHex< sal_uInt16 >( "flags-1", "QUERYTABLESETTINGS-FLAGS" );
            switch( nType )
            {
                case 4:     dumpHex< sal_uInt16 >( "html-flags", "QUERYTABLESETTINGS-HTML-FLAGS" );     break;
                case 5:     dumpHex< sal_uInt16 >( "oledb-flags", "QUERYTABLESETTINGS-OLEDB-FLAGS" );   break;
                case 7:     dumpHex< sal_uInt16 >( "ado-flags", "QUERYTABLESETTINGS-ADO-FLAGS" );       break;
                default:    dumpUnused( 2 );
            }
            dumpHex< sal_uInt16 >( "ext-flags", "QUERYTABLESETTINGS-EXT-FLAGS" );
            dumpDec< sal_uInt8 >( "edited-version" );
            dumpDec< sal_uInt8 >( "refreshed-version" );
            dumpDec< sal_uInt8 >( "min-refresh-version" );
            dumpUnused( 3 );
            dumpDec< sal_uInt16 >( "oledb-count" );
            dumpDec< sal_uInt16 >( "future-data-size" );
            dumpDec< sal_uInt16 >( "refresh-interval", "QUERYTABLESETTINGS-INTERVAL" );
            dumpDec< sal_uInt16 >( "html-format", "QUERYTABLESETTINGS-HTMLFORMAT" );
        }
        break;

        case BIFF_ID_QUERYTABLESTRING:
            dumpFrHeader( true, false );
            dumpUniString( "connection-string" );
        break;

        case BIFF_ID_RECALCID:
            dumpFrHeader( true, false );
            dumpDec< sal_uInt32 >( "recalc-engine-id" );
        break;

        case BIFF_ID_RK:
            dumpCellHeader();
            dumpRk( "value" );
        break;

        case BIFF2_ID_ROW:
        {
            dumpRowIndex();
            dumpColIndex( "first-used-col-idx" );
            dumpColIndex( "first-free-col-idx" );
            dumpHex< sal_uInt16 >( "height", "ROW-HEIGHT" );
            dumpUnused( 2 );
            bool bHasDefXf = dumpBool< sal_uInt8 >( "custom-format" );
            dumpDec< sal_uInt16 >( "cell-offset" );
            if( bHasDefXf ) dumpXfIdx( "custom-format", true );
            if( bHasDefXf ) dumpXfIdx( "custom-xf-idx", false );
        }
        break;

        case BIFF3_ID_ROW:
            dumpRowIndex();
            dumpColIndex( "first-used-col-idx" );
            dumpColIndex( "first-free-col-idx" );
            dumpHex< sal_uInt16 >( "height", "ROW-HEIGHT" );
            dumpUnused( (eBiff <= BIFF4) ? 2 : 4 );
            if( eBiff <= BIFF4 ) dumpDec< sal_uInt16 >( "cell-offset" );
            dumpHex< sal_uInt32 >( "flags", "ROW-FLAGS" );
        break;

        case BIFF_ID_RSTRING:
        {
            sal_uInt16 nXfIdx = dumpCellHeader();
            rtl_TextEncoding eOldTextEnc = getBiffData().getTextEncoding();
            getBiffData().setTextEncoding( getBiffData().getXfEncoding( nXfIdx ) );
            dumpString( "value" );
            getBiffData().setTextEncoding( eOldTextEnc );
            FontPortionModelList aPortions;
            aPortions.importPortions( rStrm, eBiff == BIFF8 );
            writeFontPortions( aPortions );
        }
        break;

        case BIFF_ID_SCENARIO:
        {
            sal_uInt16 nCellCount = dumpDec< sal_uInt16 >( "cell-count" );
            // two bytes instead of flag field
            dumpBoolean( "locked" );
            dumpBoolean( "hidden" );
            sal_uInt16 nNameLen = dumpDec< sal_uInt8 >( "name-len" );
            sal_uInt16 nCommentLen = dumpDec< sal_uInt8 >( "comment-len" );
            sal_uInt16 nUserLen = dumpDec< sal_uInt8 >( "user-len" );
            writeStringItem( "name", rStrm.readUniStringBody( nNameLen, true ) );
            if( nUserLen > 0 ) dumpUniString( "user" );         // repeated string length
            if( nCommentLen > 0 ) dumpUniString( "comment" );   // repeated string length
            mxOut->resetItemIndex();
            for( sal_uInt16 nCell = 0; !rStrm.isEof() && (nCell < nCellCount); ++nCell )
                dumpAddress( "#pos" );
            mxOut->resetItemIndex();
            for( sal_uInt16 nCell = 0; !rStrm.isEof() && (nCell < nCellCount); ++nCell )
                dumpString( "#value" );
            dumpUnused( 2 * nCellCount );
        }
        break;

        case BIFF_ID_SCENARIOS:
            dumpDec< sal_uInt16 >( "count" );
            dumpDec< sal_uInt16 >( "selected" );
            dumpDec< sal_uInt16 >( "shown" );
            dumpRangeList( "result-cells" );
        break;

        case BIFF_ID_SCL:
        {
            sal_uInt16 nNum = dumpDec< sal_uInt16 >( "numerator" );
            sal_uInt16 nDen = dumpDec< sal_uInt16 >( "denominator" );
            if( nDen > 0 ) writeDecItem( "current-zoom", static_cast< sal_uInt16 >( nNum * 100 / nDen ), "CONV-PERCENT" );
        }
        break;

        case BIFF_ID_SCREENTIP:
            dumpFrHeader( false, true );
            dumpNullUnicodeArray( "tooltip" );
        break;

        case BIFF_ID_SELECTION:
            dumpDec< sal_uInt8 >( "pane", "PANE-ID" );
            dumpAddress( "active-cell" );
            dumpDec< sal_uInt16 >( "list-idx" );
            dumpRangeList( "selection", false );
        break;

        case BIFF_ID_SHAREDFEATHEAD:
        {
            dumpFrHeader( true, true );
            sal_uInt16 nType = dumpDec< sal_uInt16 >( "feature-type", "SHAREDFEATHEAD-TYPE" );
            dumpUnused( 1 );
            if( dumpBool< sal_Int32 >( "has-data" ) ) switch( nType )
            {
                case 2:
                    dumpHex< sal_uInt32 >( "allowed-flags", "SHAREDFEATHEAD-PROT-FLAGS" );
                break;
            }
        }
        break;

        case BIFF_ID_SHAREDFMLA:
            dumpRange( "formula-range", false );
            dumpUnused( 1 );
            dumpDec< sal_uInt8 >( "cell-count" );
            getFormulaDumper().dumpCellFormula();
        break;

        case BIFF_ID_SHEET:
            if( eBiff >= BIFF5 )
            {
                rStrm.enableDecoder( false );
                dumpHex< sal_uInt32 >( "sheet-stream-pos", "CONV-DEC" );
                rStrm.enableDecoder( true );
                dumpDec< sal_uInt8 >( "sheet-state", "SHEET-STATE" );
                dumpDec< sal_uInt8 >( "sheet-type", "SHEET-TYPE" );
            }
            dumpString( "sheet-name", BIFF_STR_8BITLENGTH, BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_SHEETEXT:
            dumpFrHeader( true, true );
            dumpDec< sal_uInt32 >( "rec-size" );
            dumpDec< sal_uInt32 >( "flags-1", "SHEETEXT-FLAGS1" );
            if( rStrm.getRemaining() >= 20 )
            {
                dumpDec< sal_uInt32 >( "flags-2", "SHEETEXT-FLAGS2" );
                dumpExtCfColor( "tab-color" );
            }
        break;

        case BIFF_ID_SHEETHEADER:
            dumpHex< sal_uInt32 >( "substream-size", "CONV-DEC" );
            dumpByteString( "sheet-name", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_SST:
            dumpDec< sal_uInt32 >( "string-cell-count" );
            dumpDec< sal_uInt32 >( "sst-size" );
            mxOut->resetItemIndex();
            while( !rStrm.isEof() && (rStrm.getRemaining() >= 3) )
                dumpUniString( "#entry" );
        break;

        case BIFF2_ID_STRING:
        case BIFF3_ID_STRING:
            dumpString( "result", ((nRecId == BIFF2_ID_STRING) && (eBiff <= BIFF4)) ? BIFF_STR_8BITLENGTH : BIFF_STR_DEFAULT );
        break;

        case BIFF_ID_STYLE:
        {
            sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "STYLE-FLAGS" );
            if( getFlag( nFlags, BIFF_STYLE_BUILTIN ) )
            {
                dumpDec< sal_Int8 >( "builtin-idx", "STYLE-BUILTIN" );
                dumpDec< sal_Int8 >( "outline-level" );
            }
            else
                dumpString( "style-name", BIFF_STR_8BITLENGTH );
        }
        break;

        case BIFF_ID_STYLEEXT:
            dumpFrHeader( true, true );
            dumpHex< sal_uInt8 >( "flags", "STYLEEXT-FLAGS" );
            dumpDec< sal_uInt8 >( "category", "STYLEEXT-CATEGORY" );
            dumpDec< sal_Int8 >( "builtin-idx", "STYLEEXT-BUILTIN" );
            dumpDec< sal_Int8 >( "outline-level" );
            dumpUnicodeArray( "style-name", rStrm.readuInt16() );
            dumpDxfProp();
        break;

        case BIFF_ID_TABLESTYLES:
        {
            dumpFrHeader( true, true );
            dumpDec< sal_uInt32 >( "table-style-count" );
            sal_uInt16 nDefTableLen, nDefPivotLen;
            rStrm >> nDefTableLen >> nDefPivotLen;
            dumpUnicodeArray( "def-table-style", nDefTableLen );
            dumpUnicodeArray( "def-pivot-style", nDefPivotLen );
        }
        break;

        case BIFF_ID_THEME:
            dumpFrHeader( true, true );
            dumpDec< sal_uInt32 >( "theme-version", "THEME-VERSION" );
        break;

        case BIFF_ID_TXO:
            dumpHex< sal_uInt16 >( "flags", "TXO-FLAGS" );
            dumpDec< sal_uInt16 >( "orientation", "TEXTORIENTATION" );
            dumpHex< sal_uInt16 >( "button-flags", "OBJ-BUTTON-FLAGS" );
            dumpUnicode( "accelerator" );
            dumpUnicode( "fareast-accelerator" );
            dumpDec< sal_uInt16 >( "text-len" );
            dumpDec< sal_uInt16 >( "format-run-size" );
            dumpUnused( 4 );
        break;

        case BIFF_ID_WINDOW1:
            dumpDec< sal_uInt16 >( "window-x", "CONV-TWIP-TO-CM" );
            dumpDec< sal_uInt16 >( "window-y", "CONV-TWIP-TO-CM" );
            dumpDec< sal_uInt16 >( "window-width", "CONV-TWIP-TO-CM" );
            dumpDec< sal_uInt16 >( "window-height", "CONV-TWIP-TO-CM" );
            if( eBiff <= BIFF4 )
            {
                dumpBool< sal_uInt8 >( "hidden" );
            }
            else
            {
                dumpHex< sal_uInt16 >( "flags", "WINDOW1-FLAGS" );
                dumpDec< sal_uInt16 >( "active-tab" );
                dumpDec< sal_uInt16 >( "first-visible-tab" );
                dumpDec< sal_uInt16 >( "selected-tabs" );
                dumpDec< sal_uInt16 >( "tabbar-ratio", "WINDOW1-TABBARRATIO" );
            }
        break;

        case BIFF2_ID_WINDOW2:
            dumpBool< sal_uInt8 >( "show-formulas" );
            dumpBool< sal_uInt8 >( "show-gridlines" );
            dumpBool< sal_uInt8 >( "show-headings" );
            dumpBool< sal_uInt8 >( "frozen-panes" );
            dumpBool< sal_uInt8 >( "show-zeros" );
            dumpAddress( "first-visible-cell" );
            dumpBool< sal_uInt8 >( "auto-grid-color" );
            dumpColorABGR( "grid-color" );
        break;

        case BIFF3_ID_WINDOW2:
            dumpHex< sal_uInt16 >( "flags", "WINDOW2-FLAGS" );
            dumpAddress( "first-visible-cell" );
            if( eBiff == BIFF8 )
            {
                dumpColorIdx( "grid-color-idx" );
                dumpUnused( 2 );
                if( rStrm.getRemaining() >= 8 )
                {
                    dumpDec< sal_uInt16 >( "pagebreak-zoom", "CONV-PERCENT" );
                    dumpDec< sal_uInt16 >( "normal-zoom", "CONV-PERCENT" );
                    dumpUnused( 4 );
                }
            }
            else
                dumpColorABGR( "grid-color" );
        break;

        case BIFF_ID_WRITEACCESS:
            dumpString( "user-name", BIFF_STR_8BITLENGTH );
        break;

        case BIFF_ID_XCT:
            dumpDec< sal_uInt16 >( "crn-count" );
            if( eBiff == BIFF8 ) dumpDec< sal_Int16 >( "sheet-idx" );
        break;

        case BIFF2_ID_XF:
        case BIFF3_ID_XF:
        case BIFF4_ID_XF:
        case BIFF5_ID_XF:
            dumpXfRec();
        break;

        case BIFF_ID_XFCRC:
            dumpFrHeader( true, true );
            dumpUnused( 2 );
            dumpDec< sal_uInt16 >( "xf-count" );
            dumpHex< sal_uInt32 >( "xf-checksum" );
        break;

        case BIFF_ID_XFEXT:
            dumpFrHeader( true, true );
            dumpUnused( 2 );
            dumpXfIdx( "xf-idx" );
            dumpUnused( 2 );
            dumpXfExtProp();
        break;
    }
}