LCOV - code coverage report
Current view: top level - libreoffice/sc/source/filter/excel - read.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 217 705 30.8 %
Date: 2012-12-27 Functions: 3 4 75.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <stdlib.h>
      21             : #include <stdio.h>
      22             : 
      23             : #include "document.hxx"
      24             : #include "scerrors.hxx"
      25             : #include "fprogressbar.hxx"
      26             : #include "xltracer.hxx"
      27             : #include "xltable.hxx"
      28             : #include "xihelper.hxx"
      29             : #include "xipage.hxx"
      30             : #include "xiview.hxx"
      31             : #include "xilink.hxx"
      32             : #include "xiname.hxx"
      33             : #include "xicontent.hxx"
      34             : #include "xiescher.hxx"
      35             : #include "xipivot.hxx"
      36             : #include "XclImpChangeTrack.hxx"
      37             : 
      38             : #include "root.hxx"
      39             : #include "imp_op.hxx"
      40             : #include "excimp8.hxx"
      41             : 
      42           0 : FltError ImportExcel::Read( void )
      43             : {
      44           0 :     XclImpPageSettings&     rPageSett       = GetPageSettings();
      45           0 :     XclImpTabViewSettings&  rTabViewSett    = GetTabViewSettings();
      46           0 :     XclImpPalette&          rPal            = GetPalette();
      47           0 :     XclImpFontBuffer&       rFontBfr        = GetFontBuffer();
      48           0 :     XclImpNumFmtBuffer&     rNumFmtBfr      = GetNumFmtBuffer();
      49           0 :     XclImpXFBuffer&         rXFBfr          = GetXFBuffer();
      50           0 :     XclImpNameManager&      rNameMgr        = GetNameManager();
      51           0 :     XclImpObjectManager&    rObjMgr         = GetObjectManager();
      52             :     (void)rObjMgr;
      53             :     // call to GetCurrSheetDrawing() cannot be cached (changes in new sheets)
      54             : 
      55             :     enum Zustand {
      56             :         Z_BiffNull, // Nicht in gueltigem Biff-Format
      57             :         Z_Biff2,    // Biff2: nur eine Tabelle
      58             : 
      59             :         Z_Biff3,    // Biff3: nur eine Tabelle
      60             : 
      61             :         Z_Biff4,    // Biff4: nur eine Tabelle
      62             :         Z_Biff4W,   // Biff4 Workbook: Globals
      63             :         Z_Biff4T,   // Biff4 Workbook: eine Tabelle selbst
      64             :         Z_Biff4E,   // Biff4 Workbook: zwischen den Tabellen
      65             : 
      66             :         Z_Biff5WPre,// Biff5: Prefetch Workbook
      67             :         Z_Biff5W,   // Biff5: Globals
      68             :         Z_Biff5TPre,// Biff5: Prefetch fuer Shrfmla/Array Formula
      69             :         Z_Biff5T,   // Biff5: eine Tabelle selbst
      70             :         Z_Biff5E,   // Biff5: zwischen den Tabellen
      71             :         Z_Biffn0,   // Alle Biffs: Tabelle bis naechstesss EOF ueberlesen
      72             :         Z_Ende };
      73             : 
      74           0 :     Zustand             eAkt = Z_BiffNull, ePrev = Z_BiffNull;
      75             : 
      76           0 :     FltError        eLastErr = eERR_OK;
      77             :     sal_uInt16      nOpcode;
      78           0 :     sal_uInt16      nBofLevel = 0;
      79             : 
      80             :     OSL_ENSURE( &aIn != NULL, "-ImportExcel::Read(): Kein Stream - wie dass?!" );
      81             : 
      82             :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
      83             :     ::std::auto_ptr< ScfSimpleProgressBar > pProgress( new ScfSimpleProgressBar(
      84           0 :         aIn.GetSvStreamSize(), GetDocShell(), STR_LOAD_DOC ) );
      85             :     SAL_WNODEPRECATED_DECLARATIONS_POP
      86             : 
      87             :     /*  #i104057# Need to track a base position for progress bar calculation,
      88             :         because sheet substreams may not be in order of sheets. */
      89           0 :     sal_Size nProgressBasePos = 0;
      90           0 :     sal_Size nProgressBaseSize = 0;
      91             : 
      92           0 :     while( eAkt != Z_Ende )
      93             :     {
      94           0 :         if( eAkt == Z_Biff5E )
      95             :         {
      96           0 :             sal_uInt16 nScTab = GetCurrScTab();
      97           0 :             if( nScTab < maSheetOffsets.size()  )
      98             :             {
      99           0 :                 nProgressBaseSize += (aIn.GetSvStreamPos() - nProgressBasePos);
     100           0 :                 nProgressBasePos = maSheetOffsets[ nScTab ];
     101           0 :                 aIn.StartNextRecord( nProgressBasePos );
     102             :             }
     103             :             else
     104           0 :                 eAkt = Z_Ende;
     105             :         }
     106             :         else
     107           0 :             aIn.StartNextRecord();
     108             : 
     109           0 :         nOpcode = aIn.GetRecId();
     110             : 
     111           0 :         if( !aIn.IsValid() )
     112             :         {
     113             :             // finalize table if EOF is missing
     114           0 :             switch( eAkt )
     115             :             {
     116             :                 case Z_Biff2:
     117             :                 case Z_Biff3:
     118             :                 case Z_Biff4:
     119             :                 case Z_Biff4T:
     120             :                 case Z_Biff5TPre:
     121             :                 case Z_Biff5T:
     122           0 :                     rNumFmtBfr.CreateScFormats();
     123           0 :                     Eof();
     124           0 :                 break;
     125             :                 default:;
     126             :             };
     127           0 :             eAkt = Z_Ende;
     128           0 :             break;
     129             :         }
     130             : 
     131           0 :         if( eAkt == Z_Ende )
     132           0 :             break;
     133             : 
     134           0 :         if( eAkt != Z_Biff5TPre && eAkt != Z_Biff5WPre )
     135           0 :             pProgress->ProgressAbs( nProgressBaseSize + aIn.GetSvStreamPos() - nProgressBasePos );
     136             : 
     137           0 :         switch( eAkt )
     138             :         {
     139             :             // ----------------------------------------------------------------
     140             :             case Z_BiffNull:    // ------------------------------- Z_BiffNull -
     141             :             {
     142           0 :                 switch( nOpcode )
     143             :                 {
     144             :                     case EXC_ID2_BOF:
     145             :                     case EXC_ID3_BOF:
     146             :                     case EXC_ID4_BOF:
     147             :                     case EXC_ID5_BOF:
     148             :                     {
     149             :                         // #i23425# don't rely on the record ID, but on the detected BIFF version
     150           0 :                         switch( GetBiff() )
     151             :                         {
     152             :                             case EXC_BIFF2:
     153           0 :                                 Bof2();
     154           0 :                                 if( pExcRoot->eDateiTyp == Biff2 )
     155             :                                 {
     156           0 :                                     eAkt = Z_Biff2;
     157           0 :                                     NeueTabelle();
     158             :                                 }
     159           0 :                             break;
     160             :                             case EXC_BIFF3:
     161           0 :                                 Bof3();
     162           0 :                                 if( pExcRoot->eDateiTyp == Biff3 )
     163             :                                 {
     164           0 :                                     eAkt = Z_Biff3;
     165           0 :                                     NeueTabelle();
     166             :                                 }
     167           0 :                             break;
     168             :                             case EXC_BIFF4:
     169           0 :                                 Bof4();
     170           0 :                                 if( pExcRoot->eDateiTyp == Biff4 )
     171             :                                 {
     172           0 :                                     eAkt = Z_Biff4;
     173           0 :                                     NeueTabelle();
     174             :                                 }
     175           0 :                                 else if( pExcRoot->eDateiTyp == Biff4W )
     176           0 :                                     eAkt = Z_Biff4W;
     177           0 :                             break;
     178             :                             case EXC_BIFF5:
     179           0 :                                 Bof5();
     180           0 :                                 if( pExcRoot->eDateiTyp == Biff5W )
     181             :                                 {
     182           0 :                                     eAkt = Z_Biff5WPre;
     183             : 
     184           0 :                                     nBdshtTab = 0;
     185             : 
     186           0 :                                     aIn.StoreGlobalPosition(); // und Position merken
     187             :                                 }
     188           0 :                                 else if( pExcRoot->eDateiTyp == Biff5 )
     189             :                                 {
     190             :                                     // #i62752# possible to have BIFF5 sheet without globals
     191           0 :                                     NeueTabelle();
     192           0 :                                     eAkt = Z_Biff5TPre;  // Shrfmla Prefetch, Row-Prefetch
     193           0 :                                     nBofLevel = 0;
     194           0 :                                     aIn.StoreGlobalPosition(); // und Position merken
     195             :                                 }
     196           0 :                             break;
     197             :                             default:
     198             :                                 DBG_ERROR_BIFF();
     199             :                         }
     200             :                     }
     201           0 :                     break;
     202             :                 }
     203             :             }
     204           0 :                 break;
     205             :             // ----------------------------------------------------------------
     206             :             case Z_Biff2:       // ---------------------------------- Z_Biff2 -
     207             :             {
     208           0 :                 switch( nOpcode )
     209             :                 {
     210             :                     case EXC_ID2_DIMENSIONS:
     211           0 :                     case EXC_ID3_DIMENSIONS:    ReadDimensions();       break;
     212             :                     case EXC_ID2_BLANK:
     213           0 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
     214           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
     215             :                     case EXC_ID2_NUMBER:
     216           0 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
     217             :                     case EXC_ID2_LABEL:
     218           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
     219             :                     case EXC_ID2_BOOLERR:
     220           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
     221           0 :                     case EXC_ID_RK:             ReadRk();               break;
     222             : 
     223           0 :                     case 0x06:  Formula25(); break;     // FORMULA      [ 2  5]
     224           0 :                     case 0x08:  Row25(); break;         // ROW          [ 2  5]
     225             :                     case 0x0A:                          // EOF          [ 2345]
     226           0 :                         rNumFmtBfr.CreateScFormats();
     227           0 :                         rNameMgr.ConvertAllTokens();
     228           0 :                         Eof();
     229           0 :                         eAkt = Z_Ende;
     230           0 :                         break;
     231             :                     case 0x14:
     232           0 :                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
     233           0 :                     case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     234           0 :                     case 0x18:  rNameMgr.ReadName( maStrm );            break;
     235           0 :                     case 0x1C:  GetCurrSheetDrawing().ReadNote( maStrm );break;
     236           0 :                     case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     237           0 :                     case 0x1E:  rNumFmtBfr.ReadFormat( maStrm );        break;
     238           0 :                     case 0x20:  Columndefault(); break; // COLUMNDEFAULT[ 2   ]
     239           0 :                     case 0x21:  Array25(); break;       // ARRAY        [ 2  5]
     240           0 :                     case 0x23:  Externname25(); break;  // EXTERNNAME   [ 2  5]
     241           0 :                     case 0x24:  Colwidth(); break;      // COLWIDTH     [ 2   ]
     242           0 :                     case 0x25:  Defrowheight2(); break; // DEFAULTROWHEI[ 2   ]
     243             :                     case 0x26:
     244             :                     case 0x27:
     245             :                     case 0x28:
     246           0 :                     case 0x29:  rPageSett.ReadMargin( maStrm );         break;
     247           0 :                     case 0x2A:  rPageSett.ReadPrintHeaders( maStrm );   break;
     248           0 :                     case 0x2B:  rPageSett.ReadPrintGridLines( maStrm ); break;
     249             :                     case 0x2F:                          // FILEPASS     [ 2345]
     250           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     251           0 :                         if( eLastErr != ERRCODE_NONE )
     252           0 :                             eAkt = Z_Ende;
     253           0 :                         break;
     254           0 :                     case EXC_ID2_FONT:  rFontBfr.ReadFont( maStrm );    break;
     255           0 :                     case EXC_ID_EFONT:  rFontBfr.ReadEfont( maStrm );   break;
     256           0 :                     case 0x3E:  rTabViewSett.ReadWindow2( maStrm, false );break;
     257           0 :                     case 0x41:  rTabViewSett.ReadPane( maStrm );        break;
     258           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     259           0 :                     case 0x43:  rXFBfr.ReadXF( maStrm );                break;
     260           0 :                     case 0x44:  Ixfe(); break;          // IXFE         [ 2   ]
     261             :                 }
     262             :             }
     263           0 :                 break;
     264             :             // ----------------------------------------------------------------
     265             :             case Z_Biff3:       // ---------------------------------- Z_Biff3 -
     266             :             {
     267           0 :                 switch( nOpcode )
     268             :                 {
     269             :                     // skip chart substream
     270             :                     case EXC_ID2_BOF:
     271             :                     case EXC_ID3_BOF:
     272             :                     case EXC_ID4_BOF:
     273           0 :                     case EXC_ID5_BOF:           XclTools::SkipSubStream( maStrm );  break;
     274             : 
     275             :                     case EXC_ID2_DIMENSIONS:
     276           0 :                     case EXC_ID3_DIMENSIONS:    ReadDimensions();       break;
     277             :                     case EXC_ID2_BLANK:
     278           0 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
     279           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
     280             :                     case EXC_ID2_NUMBER:
     281           0 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
     282             :                     case EXC_ID2_LABEL:
     283           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
     284             :                     case EXC_ID2_BOOLERR:
     285           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
     286           0 :                     case EXC_ID_RK:             ReadRk();               break;
     287             : 
     288             :                     case 0x0A:                          // EOF          [ 2345]
     289           0 :                         rNumFmtBfr.CreateScFormats();
     290           0 :                         rNameMgr.ConvertAllTokens();
     291           0 :                         Eof();
     292           0 :                         eAkt = Z_Ende;
     293           0 :                         break;
     294             :                     case 0x14:
     295           0 :                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
     296           0 :                     case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     297             :                     case 0x1A:
     298           0 :                     case 0x1B:  rPageSett.ReadPageBreaks( maStrm );     break;
     299           0 :                     case 0x1C:  GetCurrSheetDrawing().ReadNote( maStrm );break;
     300           0 :                     case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     301           0 :                     case 0x1E:  rNumFmtBfr.ReadFormat( maStrm );        break;
     302           0 :                     case 0x22:  Rec1904(); break;       // 1904         [ 2345]
     303             :                     case 0x26:
     304             :                     case 0x27:
     305             :                     case 0x28:
     306           0 :                     case 0x29:  rPageSett.ReadMargin( maStrm );         break;
     307           0 :                     case 0x2A:  rPageSett.ReadPrintHeaders( maStrm );   break;
     308           0 :                     case 0x2B:  rPageSett.ReadPrintGridLines( maStrm ); break;
     309             :                     case 0x2F:                          // FILEPASS     [ 2345]
     310           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     311           0 :                         if( eLastErr != ERRCODE_NONE )
     312           0 :                             eAkt = Z_Ende;
     313           0 :                         break;
     314           0 :                     case EXC_ID_FILESHARING: ReadFileSharing();         break;
     315           0 :                     case 0x41:  rTabViewSett.ReadPane( maStrm );        break;
     316           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     317           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34 ]
     318           0 :                     case 0x5D:  GetCurrSheetDrawing().ReadObj( maStrm );break;
     319           0 :                     case 0x7D:  Colinfo(); break;       // COLINFO      [  345]
     320           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345]
     321           0 :                     case 0x92:  rPal.ReadPalette( maStrm );             break;
     322           0 :                     case 0x0206: Formula3(); break;     // FORMULA      [  3  ]
     323           0 :                     case 0x0208: Row34(); break;        // ROW          [  34 ]
     324           0 :                     case 0x0218: rNameMgr.ReadName( maStrm );           break;
     325           0 :                     case 0x0221: Array34(); break;      // ARRAY        [  34 ]
     326           0 :                     case 0x0223: Externname34(); break; // EXTERNNAME   [  34 ]
     327           0 :                     case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345]
     328           0 :                     case 0x0231: rFontBfr.ReadFont( maStrm );           break;
     329           0 :                     case 0x023E: rTabViewSett.ReadWindow2( maStrm, false );break;
     330           0 :                     case 0x0243: rXFBfr.ReadXF( maStrm );               break;
     331           0 :                     case 0x0293: rXFBfr.ReadStyle( maStrm );            break;
     332             :                 }
     333             :             }
     334           0 :                 break;
     335             :             // ----------------------------------------------------------------
     336             :             case Z_Biff4:       // ---------------------------------- Z_Biff4 -
     337             :             {
     338           0 :                 switch( nOpcode )
     339             :                 {
     340             :                     // skip chart substream
     341             :                     case EXC_ID2_BOF:
     342             :                     case EXC_ID3_BOF:
     343             :                     case EXC_ID4_BOF:
     344           0 :                     case EXC_ID5_BOF:           XclTools::SkipSubStream( maStrm );  break;
     345             : 
     346             :                     case EXC_ID2_DIMENSIONS:
     347           0 :                     case EXC_ID3_DIMENSIONS:    ReadDimensions();       break;
     348             :                     case EXC_ID2_BLANK:
     349           0 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
     350           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
     351             :                     case EXC_ID2_NUMBER:
     352           0 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
     353             :                     case EXC_ID2_LABEL:
     354           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
     355             :                     case EXC_ID2_BOOLERR:
     356           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
     357           0 :                     case EXC_ID_RK:             ReadRk();               break;
     358             : 
     359             :                     case 0x0A:                          // EOF          [ 2345]
     360           0 :                         rNumFmtBfr.CreateScFormats();
     361           0 :                         rNameMgr.ConvertAllTokens();
     362           0 :                         Eof();
     363           0 :                         eAkt = Z_Ende;
     364           0 :                         break;
     365           0 :                     case 0x12:  SheetProtect(); break;       // SHEET PROTECTION
     366             :                     case 0x14:
     367           0 :                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
     368           0 :                     case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     369             :                     case 0x1A:
     370           0 :                     case 0x1B:  rPageSett.ReadPageBreaks( maStrm );     break;
     371           0 :                     case 0x1C:  GetCurrSheetDrawing().ReadNote( maStrm );break;
     372           0 :                     case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     373           0 :                     case 0x22:  Rec1904(); break;       // 1904         [ 2345]
     374             :                     case 0x26:
     375             :                     case 0x27:
     376             :                     case 0x28:
     377           0 :                     case 0x29:  rPageSett.ReadMargin( maStrm );         break;
     378           0 :                     case 0x2A:  rPageSett.ReadPrintHeaders( maStrm );   break;
     379           0 :                     case 0x2B:  rPageSett.ReadPrintGridLines( maStrm ); break;
     380             :                     case 0x2F:                          // FILEPASS     [ 2345]
     381           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     382           0 :                         if( eLastErr != ERRCODE_NONE )
     383           0 :                             eAkt = Z_Ende;
     384           0 :                         break;
     385           0 :                     case EXC_ID_FILESHARING: ReadFileSharing();         break;
     386           0 :                     case 0x41:  rTabViewSett.ReadPane( maStrm );        break;
     387           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     388           0 :                     case 0x55:  DefColWidth(); break;
     389           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34 ]
     390           0 :                     case 0x5D:  GetCurrSheetDrawing().ReadObj( maStrm );break;
     391           0 :                     case 0x7D:  Colinfo(); break;       // COLINFO      [  345]
     392           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345]
     393           0 :                     case 0x92:  rPal.ReadPalette( maStrm );             break;
     394           0 :                     case 0x99:  Standardwidth(); break; // STANDARDWIDTH[   45]
     395           0 :                     case 0xA1:  rPageSett.ReadSetup( maStrm );          break;
     396           0 :                     case 0x0208: Row34(); break;        // ROW          [  34 ]
     397           0 :                     case 0x0218: rNameMgr.ReadName( maStrm );           break;
     398           0 :                     case 0x0221: Array34(); break;      // ARRAY        [  34 ]
     399           0 :                     case 0x0223: Externname34(); break; // EXTERNNAME   [  34 ]
     400           0 :                     case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345]
     401           0 :                     case 0x0231: rFontBfr.ReadFont( maStrm );           break;
     402           0 :                     case 0x023E: rTabViewSett.ReadWindow2( maStrm, false );break;
     403           0 :                     case 0x0406: Formula4(); break;     // FORMULA      [   4 ]
     404           0 :                     case 0x041E: rNumFmtBfr.ReadFormat( maStrm );       break;
     405           0 :                     case 0x0443: rXFBfr.ReadXF( maStrm );               break;
     406           0 :                     case 0x0293: rXFBfr.ReadStyle( maStrm );            break;
     407             :                 }
     408             :             }
     409           0 :                 break;
     410             :             // ----------------------------------------------------------------
     411             :             case Z_Biff4W:      // --------------------------------- Z_Biff4W -
     412             :             {
     413           0 :                 switch( nOpcode )
     414             :                 {
     415             :                     case 0x0A:                          // EOF          [ 2345]
     416           0 :                         rNameMgr.ConvertAllTokens();
     417           0 :                         eAkt = Z_Ende;
     418           0 :                         break;
     419           0 :                     case 0x12:  DocProtect(); break;    // PROTECT      [    5]
     420             :                     case 0x2F:                          // FILEPASS     [ 2345]
     421           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     422           0 :                         if( eLastErr != ERRCODE_NONE )
     423           0 :                             eAkt = Z_Ende;
     424           0 :                         break;
     425           0 :                     case EXC_ID_FILESHARING: ReadFileSharing();         break;
     426           0 :                     case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     427           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     428           0 :                     case 0x55:  DefColWidth(); break;
     429           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34 ]
     430           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345]
     431           0 :                     case 0x8F:  Bundleheader(); break;  // BUNDLEHEADER [   4 ]
     432           0 :                     case 0x92:  rPal.ReadPalette( maStrm );             break;
     433           0 :                     case 0x99:  Standardwidth(); break; // STANDARDWIDTH[   45]
     434           0 :                     case 0x0218: rNameMgr.ReadName( maStrm );           break;
     435           0 :                     case 0x0223: Externname34(); break; // EXTERNNAME   [  34 ]
     436           0 :                     case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345]
     437           0 :                     case 0x0231: rFontBfr.ReadFont( maStrm );           break;
     438             :                     case 0x0409:                        // BOF          [   4 ]
     439           0 :                         Bof4();
     440           0 :                         if( pExcRoot->eDateiTyp == Biff4 )
     441             :                         {
     442           0 :                             eAkt = Z_Biff4T;
     443           0 :                             NeueTabelle();
     444             :                         }
     445             :                         else
     446           0 :                             eAkt = Z_Ende;
     447           0 :                         break;
     448           0 :                     case 0x041E: rNumFmtBfr.ReadFormat( maStrm );       break;
     449           0 :                     case 0x0443: rXFBfr.ReadXF( maStrm );               break;
     450           0 :                     case 0x0293: rXFBfr.ReadStyle( maStrm );            break;
     451             :                 }
     452             : 
     453             :             }
     454           0 :                 break;
     455             :             // ----------------------------------------------------------------
     456             :             case Z_Biff4T:       // --------------------------------- Z_Biff4T -
     457             :             {
     458           0 :                 switch( nOpcode )
     459             :                 {
     460             :                     // skip chart substream
     461             :                     case EXC_ID2_BOF:
     462             :                     case EXC_ID3_BOF:
     463             :                     case EXC_ID4_BOF:
     464           0 :                     case EXC_ID5_BOF:           XclTools::SkipSubStream( maStrm );  break;
     465             : 
     466             :                     case EXC_ID2_DIMENSIONS:
     467           0 :                     case EXC_ID3_DIMENSIONS:    ReadDimensions();       break;
     468             :                     case EXC_ID2_BLANK:
     469           0 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
     470           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
     471             :                     case EXC_ID2_NUMBER:
     472           0 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
     473             :                     case EXC_ID2_LABEL:
     474           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
     475             :                     case EXC_ID2_BOOLERR:
     476           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
     477           0 :                     case EXC_ID_RK:             ReadRk();               break;
     478             : 
     479             :                     case 0x0A:                          // EOF          [ 2345]
     480           0 :                         rNameMgr.ConvertAllTokens();
     481           0 :                         Eof();
     482           0 :                         eAkt = Z_Biff4E;
     483           0 :                     break;
     484           0 :                     case 0x12:  SheetProtect(); break;       // SHEET PROTECTION
     485             :                     case 0x14:
     486           0 :                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
     487             :                     case 0x1A:
     488           0 :                     case 0x1B:  rPageSett.ReadPageBreaks( maStrm );     break;
     489           0 :                     case 0x1C:  GetCurrSheetDrawing().ReadNote( maStrm );break;
     490           0 :                     case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     491             :                     case 0x2F:                          // FILEPASS     [ 2345]
     492           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     493           0 :                         if( eLastErr != ERRCODE_NONE )
     494           0 :                             eAkt = Z_Ende;
     495           0 :                         break;
     496           0 :                     case 0x41:  rTabViewSett.ReadPane( maStrm );        break;
     497           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     498           0 :                     case 0x55:  DefColWidth(); break;
     499           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34 ]
     500           0 :                     case 0x5D:  GetCurrSheetDrawing().ReadObj( maStrm );break;
     501           0 :                     case 0x7D:  Colinfo(); break;       // COLINFO      [  345]
     502           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345]
     503           0 :                     case 0x8F:  Bundleheader(); break;  // BUNDLEHEADER [   4 ]
     504           0 :                     case 0x92:  rPal.ReadPalette( maStrm );             break;
     505           0 :                     case 0x99:  Standardwidth(); break; // STANDARDWIDTH[   45]
     506           0 :                     case 0xA1:  rPageSett.ReadSetup( maStrm );          break;
     507           0 :                     case 0x0208: Row34(); break;        // ROW          [  34 ]
     508           0 :                     case 0x0218: rNameMgr.ReadName( maStrm );           break;
     509           0 :                     case 0x0221: Array34(); break;
     510           0 :                     case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345]
     511           0 :                     case 0x0231: rFontBfr.ReadFont( maStrm );           break;
     512           0 :                     case 0x023E: rTabViewSett.ReadWindow2( maStrm, false );break;
     513           0 :                     case 0x0406: Formula4(); break;
     514           0 :                     case 0x041E: rNumFmtBfr.ReadFormat( maStrm );       break;
     515           0 :                     case 0x0443: rXFBfr.ReadXF( maStrm );               break;
     516           0 :                     case 0x0293: rXFBfr.ReadStyle( maStrm );            break;
     517             :                 }
     518             : 
     519             :             }
     520           0 :                 break;
     521             :             // ----------------------------------------------------------------
     522             :             case Z_Biff4E:      // --------------------------------- Z_Biff4E -
     523             :             {
     524           0 :                 switch( nOpcode )
     525             :                 {
     526             :                     case 0x0A:                          // EOF          [ 2345]
     527           0 :                         eAkt = Z_Ende;
     528           0 :                         break;
     529           0 :                     case 0x8F:  break;                  // BUNDLEHEADER [   4 ]
     530             :                     case 0x0409:                        // BOF          [   4 ]
     531           0 :                         Bof4();
     532           0 :                         NeueTabelle();
     533           0 :                         if( pExcRoot->eDateiTyp == Biff4 )
     534             :                         {
     535           0 :                             eAkt = Z_Biff4T;
     536             :                         }
     537             :                         else
     538             :                         {
     539           0 :                             ePrev = eAkt;
     540           0 :                             eAkt = Z_Biffn0;
     541             :                         }
     542           0 :                         break;
     543             :                 }
     544             : 
     545             :             }
     546           0 :                 break;
     547             :             case Z_Biff5WPre:   // ------------------------------ Z_Biff5WPre -
     548             :             {
     549           0 :                 switch( nOpcode )
     550             :                 {
     551             :                     case 0x0A:                          // EOF          [ 2345]
     552           0 :                         eAkt = Z_Biff5W;
     553           0 :                         aIn.SeekGlobalPosition();  // und zurueck an alte Position
     554           0 :                         break;
     555           0 :                     case 0x12:  DocProtect(); break;    // PROTECT      [    5]
     556             :                     case 0x2F:                          // FILEPASS     [ 2345]
     557           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     558           0 :                         if( eLastErr != ERRCODE_NONE )
     559           0 :                             eAkt = Z_Ende;
     560           0 :                         break;
     561           0 :                     case EXC_ID_FILESHARING: ReadFileSharing();         break;
     562           0 :                     case 0x3D:  Window1(); break;
     563           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     564           0 :                     case 0x85:  Boundsheet(); break;    // BOUNDSHEET   [    5]
     565           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345]
     566             :                     // PALETTE follows XFs, but already needed while reading the XFs
     567           0 :                     case 0x92:  rPal.ReadPalette( maStrm );             break;
     568             :                 }
     569             :             }
     570           0 :                 break;
     571             :             case Z_Biff5W:      // --------------------------------- Z_Biff5W -
     572             :             {
     573           0 :                 switch( nOpcode )
     574             :                 {
     575             :                     case 0x0A:                          // EOF          [ 2345]
     576           0 :                         rNumFmtBfr.CreateScFormats();
     577           0 :                         rXFBfr.CreateUserStyles();
     578           0 :                         rNameMgr.ConvertAllTokens();
     579           0 :                         eAkt = Z_Biff5E;
     580           0 :                         break;
     581           0 :                     case 0x18:  rNameMgr.ReadName( maStrm );            break;
     582           0 :                     case 0x1E:  rNumFmtBfr.ReadFormat( maStrm );        break;
     583           0 :                     case 0x22:  Rec1904(); break;       // 1904         [ 2345]
     584           0 :                     case 0x31:  rFontBfr.ReadFont( maStrm );            break;
     585           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34 ]
     586           0 :                     case 0x8D:  Hideobj(); break;       // HIDEOBJ      [  345]
     587           0 :                     case 0xDE:  Olesize(); break;
     588           0 :                     case 0xE0:  rXFBfr.ReadXF( maStrm );                break;
     589           0 :                     case 0x0293: rXFBfr.ReadStyle( maStrm );            break;
     590           0 :                     case 0x041E: rNumFmtBfr.ReadFormat( maStrm );       break;
     591             :                 }
     592             : 
     593             :             }
     594           0 :                 break;
     595             :             // ----------------------------------------------------------------
     596             :             case Z_Biff5TPre:   // ------------------------------- Z_Biff5Pre -
     597             :             {
     598           0 :                 if( nOpcode == 0x0809 )
     599           0 :                     nBofLevel++;
     600           0 :                 else if( (nOpcode == 0x000A) && nBofLevel )
     601           0 :                     nBofLevel--;
     602           0 :                 else if( !nBofLevel )                       // don't read chart records
     603             :                 {
     604           0 :                     switch( nOpcode )
     605             :                     {
     606             :                         case EXC_ID2_DIMENSIONS:
     607           0 :                         case EXC_ID3_DIMENSIONS:    ReadDimensions();       break;
     608           0 :                         case 0x08:  Row25(); break;         // ROW          [ 2  5]
     609             :                         case 0x0A:                          // EOF          [ 2345]
     610           0 :                             eAkt = Z_Biff5T;
     611           0 :                             aIn.SeekGlobalPosition(); // und zurueck an alte Position
     612           0 :                             break;
     613           0 :                         case 0x12:  SheetProtect(); break;       // SHEET PROTECTION
     614             :                         case 0x1A:
     615           0 :                         case 0x1B:  rPageSett.ReadPageBreaks( maStrm );     break;
     616           0 :                         case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     617           0 :                         case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     618           0 :                         case 0x21:  Array25(); break;       // ARRAY        [ 2  5]
     619           0 :                         case 0x23:  Externname25(); break;  // EXTERNNAME   [ 2  5]
     620           0 :                         case 0x41:  rTabViewSett.ReadPane( maStrm );        break;
     621           0 :                         case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345]
     622           0 :                         case 0x55:  DefColWidth(); break;
     623           0 :                         case 0x7D:  Colinfo(); break;       // COLINFO      [  345]
     624           0 :                         case 0x81:  Wsbool(); break;        // WSBOOL       [ 2345]
     625           0 :                         case 0x8C:  Country(); break;       // COUNTRY      [  345]
     626           0 :                         case 0x99:  Standardwidth(); break; // STANDARDWIDTH[   45]
     627           0 :                         case 0x0208: Row34(); break;        // ROW          [  34 ]
     628           0 :                         case 0x0221: Array34(); break;      // ARRAY        [  34 ]
     629           0 :                         case 0x0223: Externname34(); break; // EXTERNNAME   [  34 ]
     630           0 :                         case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345]
     631           0 :                         case 0x023E: rTabViewSett.ReadWindow2( maStrm, false );break;
     632           0 :                         case 0x04BC: Shrfmla(); break;      // SHRFMLA      [    5]
     633             :                     }
     634             :                 }
     635             :             }
     636           0 :                 break;
     637             :             // ----------------------------------------------------------------
     638             :             case Z_Biff5T:       // --------------------------------- Z_Biff5T -
     639             :             {
     640           0 :                 switch( nOpcode )
     641             :                 {
     642             :                     case EXC_ID2_BLANK:
     643           0 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
     644           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
     645             :                     case EXC_ID2_NUMBER:
     646           0 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
     647             :                     case EXC_ID2_LABEL:
     648           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
     649             :                     case EXC_ID2_BOOLERR:
     650           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
     651           0 :                     case EXC_ID_RK:             ReadRk();               break;
     652             : 
     653             :                     case EXC_ID2_FORMULA:
     654             :                     case EXC_ID3_FORMULA:
     655           0 :                     case EXC_ID4_FORMULA:       Formula25(); break;
     656           0 :                     case 0x0A:  Eof(); eAkt = Z_Biff5E;                 break;
     657             :                     case 0x14:
     658           0 :                     case 0x15:  rPageSett.ReadHeaderFooter( maStrm );   break;
     659           0 :                     case 0x17:  Externsheet(); break;   // EXTERNSHEET  [ 2345]
     660           0 :                     case 0x1C:  GetCurrSheetDrawing().ReadNote( maStrm );break;
     661           0 :                     case 0x1D:  rTabViewSett.ReadSelection( maStrm );   break;
     662           0 :                     case 0x23:  Externname25(); break;  // EXTERNNAME   [ 2  5]
     663             :                     case 0x26:
     664             :                     case 0x27:
     665             :                     case 0x28:
     666           0 :                     case 0x29:  rPageSett.ReadMargin( maStrm );         break;
     667           0 :                     case 0x2A:  rPageSett.ReadPrintHeaders( maStrm );   break;
     668           0 :                     case 0x2B:  rPageSett.ReadPrintGridLines( maStrm ); break;
     669             :                     case 0x2F:                          // FILEPASS     [ 2345]
     670           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
     671           0 :                         if( eLastErr != ERRCODE_NONE )
     672           0 :                             eAkt = Z_Ende;
     673           0 :                         break;
     674           0 :                     case 0x5D:  GetCurrSheetDrawing().ReadObj( maStrm );break;
     675             :                     case 0x83:
     676           0 :                     case 0x84:  rPageSett.ReadCenter( maStrm );         break;
     677           0 :                     case 0xA0:  rTabViewSett.ReadScl( maStrm );         break;
     678           0 :                     case 0xA1:  rPageSett.ReadSetup( maStrm );          break;
     679           0 :                     case 0xBD:  Mulrk(); break;         // MULRK        [    5]
     680           0 :                     case 0xBE:  Mulblank(); break;      // MULBLANK     [    5]
     681           0 :                     case 0xD6:  Rstring(); break;       // RSTRING      [    5]
     682           0 :                     case 0x00E5: Cellmerging();          break;  // #i62300#
     683           0 :                     case 0x0236: TableOp(); break;      // TABLE        [    5]
     684             :                     case 0x0809:                        // BOF          [    5]
     685           0 :                         XclTools::SkipSubStream( maStrm );
     686           0 :                         break;
     687             :                 }
     688             : 
     689             :             }
     690           0 :                 break;
     691             :             // ----------------------------------------------------------------
     692             :             case Z_Biff5E:      // --------------------------------- Z_Biff5E -
     693             :             {
     694           0 :                 switch( nOpcode )
     695             :                 {
     696             :                     case 0x0809:                        // BOF          [    5]
     697           0 :                         Bof5();
     698           0 :                         NeueTabelle();
     699           0 :                         switch( pExcRoot->eDateiTyp )
     700             :                         {
     701             :                             case Biff5:
     702             :                             case Biff5M4:
     703           0 :                                 eAkt = Z_Biff5TPre; // Shrfmla Prefetch, Row-Prefetch
     704           0 :                                 nBofLevel = 0;
     705           0 :                                 aIn.StoreGlobalPosition(); // und Position merken
     706           0 :                             break;
     707             :                             case Biff5C:    // chart sheet
     708           0 :                                 GetCurrSheetDrawing().ReadTabChart( maStrm );
     709           0 :                                 Eof();
     710           0 :                                 GetTracer().TraceChartOnlySheet();
     711           0 :                             break;
     712             :                             case Biff5V:
     713             :                             default:
     714           0 :                                 pD->SetVisible( GetCurrScTab(), false );
     715           0 :                                 ePrev = eAkt;
     716           0 :                                 eAkt = Z_Biffn0;
     717             :                         }
     718             :                         OSL_ENSURE( pExcRoot->eDateiTyp != Biff5W,
     719             :                             "+ImportExcel::Read(): Doppel-Whopper-Workbook!" );
     720             : 
     721           0 :                         break;
     722             :                 }
     723             : 
     724             :             }
     725           0 :                 break;
     726             :             case Z_Biffn0:      // --------------------------------- Z_Biffn0 -
     727             :             {
     728           0 :                 switch( nOpcode )
     729             :                 {
     730             :                     case 0x0A:                          // EOF          [ 2345]
     731           0 :                         eAkt = ePrev;
     732           0 :                         IncCurrScTab();
     733           0 :                         break;
     734             :                 }
     735             : 
     736             :             }
     737           0 :                 break;
     738             :             // ----------------------------------------------------------------
     739             :             case Z_Ende:        // ----------------------------------- Z_Ende -
     740             :                 OSL_FAIL( "*ImportExcel::Read(): Not possible state!" );
     741           0 :                 break;
     742             :             default: OSL_FAIL( "-ImportExcel::Read(): Zustand vergessen!" );
     743             :         }
     744             :     }
     745             : 
     746           0 :     if( eLastErr == eERR_OK )
     747             :     {
     748           0 :         pProgress.reset();
     749             : 
     750           0 :         AdjustRowHeight();
     751           0 :         PostDocLoad();
     752             : 
     753           0 :         pD->CalcAfterLoad();
     754             : 
     755           0 :         const XclImpAddressConverter& rAddrConv = GetAddressConverter();
     756           0 :         if( rAddrConv.IsTabTruncated() )
     757           0 :             eLastErr = SCWARN_IMPORT_SHEET_OVERFLOW;
     758           0 :         else if( bTabTruncated || rAddrConv.IsRowTruncated() )
     759           0 :             eLastErr = SCWARN_IMPORT_ROW_OVERFLOW;
     760           0 :         else if( rAddrConv.IsColTruncated() )
     761           0 :             eLastErr = SCWARN_IMPORT_COLUMN_OVERFLOW;
     762             :     }
     763             : 
     764           0 :     return eLastErr;
     765             : }
     766             : 
     767             : 
     768             : //___________________________________________________________________
     769             : 
     770          20 : FltError ImportExcel8::Read( void )
     771             : {
     772             : #if EXC_INCL_DUMPER
     773             :     {
     774             :         Biff8RecDumper aDumper( GetRoot(), sal_True );
     775             :         if( aDumper.Dump( aIn ) )
     776             :             return ERRCODE_ABORT;
     777             :     }
     778             : #endif
     779             :     // read the entire BIFF8 stream
     780             :     // don't look too close - this stuff seriously needs to be reworked
     781             : 
     782          20 :     XclImpPageSettings&     rPageSett       = GetPageSettings();
     783          20 :     XclImpTabViewSettings&  rTabViewSett    = GetTabViewSettings();
     784          20 :     XclImpPalette&          rPal            = GetPalette();
     785          20 :     XclImpFontBuffer&       rFontBfr        = GetFontBuffer();
     786          20 :     XclImpNumFmtBuffer&     rNumFmtBfr      = GetNumFmtBuffer();
     787          20 :     XclImpXFBuffer&         rXFBfr          = GetXFBuffer();
     788          20 :     XclImpSst&              rSst            = GetSst();
     789          20 :     XclImpTabInfo&          rTabInfo        = GetTabInfo();
     790          20 :     XclImpNameManager&      rNameMgr        = GetNameManager();
     791          20 :     XclImpLinkManager&      rLinkMgr        = GetLinkManager();
     792          20 :     XclImpObjectManager&    rObjMgr         = GetObjectManager();
     793             :     // call to GetCurrSheetDrawing() cannot be cached (changes in new sheets)
     794          20 :     XclImpCondFormatManager& rCondFmtMgr    = GetCondFormatManager();
     795          20 :     XclImpValidationManager& rValidMgr      = GetValidationManager();
     796          20 :     XclImpPivotTableManager& rPTableMgr     = GetPivotTableManager();
     797          20 :     XclImpWebQueryBuffer&   rWQBfr          = GetWebQueryBuffer();
     798             : 
     799          20 :     bool bInUserView = false;           // true = In USERSVIEW(BEGIN|END) record block.
     800             : 
     801             :     enum XclImpReadState
     802             :     {
     803             :         EXC_STATE_BEFORE_GLOBALS,       /// Before workbook globals (wait for initial BOF).
     804             :         EXC_STATE_GLOBALS_PRE,          /// Prefetch for workbook globals.
     805             :         EXC_STATE_GLOBALS,              /// Workbook globals.
     806             :         EXC_STATE_BEFORE_SHEET,         /// Before worksheet (wait for new worksheet BOF).
     807             :         EXC_STATE_SHEET_PRE,            /// Prefetch for worksheet.
     808             :         EXC_STATE_SHEET,                /// Worksheet.
     809             :         EXC_STATE_END                   /// Stop reading.
     810             :     };
     811             : 
     812          20 :     XclImpReadState eAkt = EXC_STATE_BEFORE_GLOBALS;
     813             : 
     814          20 :     FltError eLastErr = eERR_OK;
     815             : 
     816             :     SAL_WNODEPRECATED_DECLARATIONS_PUSH
     817             :     ::std::auto_ptr< ScfSimpleProgressBar > pProgress( new ScfSimpleProgressBar(
     818          20 :         aIn.GetSvStreamSize(), GetDocShell(), STR_LOAD_DOC ) );
     819             :     SAL_WNODEPRECATED_DECLARATIONS_POP
     820             : 
     821             :     /*  #i104057# Need to track a base position for progress bar calculation,
     822             :         because sheet substreams may not be in order of sheets. */
     823          20 :     sal_Size nProgressBasePos = 0;
     824          20 :     sal_Size nProgressBaseSize = 0;
     825             : 
     826          20 :     bool bSheetHasCodeName = false;
     827             : 
     828          20 :     std::vector<rtl::OUString> aCodeNames;
     829          20 :     std::vector < SCTAB > nTabsWithNoCodeName;
     830             : 
     831       66756 :     while( eAkt != EXC_STATE_END )
     832             :     {
     833       66736 :         if( eAkt == EXC_STATE_BEFORE_SHEET )
     834             :         {
     835          93 :             sal_uInt16 nScTab = GetCurrScTab();
     836          93 :             if( nScTab < maSheetOffsets.size() )
     837             :             {
     838          75 :                 nProgressBaseSize += (maStrm.GetSvStreamPos() - nProgressBasePos);
     839          75 :                 nProgressBasePos = maSheetOffsets[ nScTab ];
     840             : 
     841             :                 // i#115255 fdo#40304 BOUNDSHEET doesn't point to a valid
     842             :                 // BOF record position.  Scan the records manually (from
     843             :                 // the BOUNDSHEET position) until we find a BOF.  Some 3rd
     844             :                 // party Russian programs generate invalid xls docs with
     845             :                 // this kind of silliness.
     846          75 :                 if (aIn.PeekRecId(nProgressBasePos) == EXC_ID5_BOF)
     847             :                     // BOUNDSHEET points to a valid BOF record.  Good.
     848          75 :                     aIn.StartNextRecord(nProgressBasePos);
     849             :                 else
     850             :                 {
     851           0 :                     bool bValid = true;
     852           0 :                     while (bValid && aIn.GetRecId() != EXC_ID5_BOF)
     853           0 :                         bValid = aIn.StartNextRecord();
     854             : 
     855           0 :                     if (!bValid)
     856             :                         // Safeguard ourselves from potential infinite loop.
     857           0 :                         eAkt = EXC_STATE_END;
     858             :                 }
     859             : 
     860             :                 // FIXME_REMOVE_WHEN_RE_BASE_COMPLETE
     861             :                 // a lamer approach to do the above from dr:
     862             : 
     863             :                 // import only 256 sheets
     864          75 :                 if( nScTab > GetScMaxPos().Tab() )
     865             :                 {
     866           0 :                     if( maStrm.GetRecId() != EXC_ID_EOF )
     867           0 :                         XclTools::SkipSubStream( maStrm );
     868             :                     // #i29930# show warning box
     869           0 :                     GetAddressConverter().CheckScTab( nScTab, true );
     870           0 :                     eAkt = EXC_STATE_END;
     871             :                 }
     872             :                 else
     873             :                 {
     874             :                     // #i109800# SHEET record may point to any record inside the
     875             :                     // sheet substream
     876          75 :                     bool bIsBof = maStrm.GetRecId() == EXC_ID5_BOF;
     877          75 :                     if( bIsBof )
     878          75 :                         Bof5(); // read the BOF record
     879             :                     else
     880           0 :                         pExcRoot->eDateiTyp = Biff8;    // on missing BOF, assume a standard worksheet
     881          75 :                     NeueTabelle();
     882          75 :                     switch( pExcRoot->eDateiTyp )
     883             :                     {
     884             :                     case Biff8:     // worksheet
     885             :                     case Biff8M4:   // macro sheet
     886          75 :                         eAkt = EXC_STATE_SHEET_PRE;  // Shrfmla Prefetch, Row-Prefetch
     887             :                         // go to next record
     888          75 :                         if( bIsBof ) maStrm.StartNextRecord();
     889          75 :                         maStrm.StoreGlobalPosition();
     890          75 :                         break;
     891             :                     case Biff8C:    // chart sheet
     892           0 :                         GetCurrSheetDrawing().ReadTabChart( maStrm );
     893           0 :                         Eof();
     894           0 :                         GetTracer().TraceChartOnlySheet();
     895           0 :                         break;
     896             :                     case Biff8W:    // workbook
     897             :                         OSL_FAIL( "ImportExcel8::Read - double workbook globals" );
     898             :                         // run through
     899             :                     case Biff8V:    // VB module
     900             :                     default:
     901             :                         // TODO: do not create a sheet in the Calc document
     902           0 :                         pD->SetVisible( nScTab, false );
     903           0 :                         XclTools::SkipSubStream( maStrm );
     904           0 :                         IncCurrScTab();
     905             :                     }
     906             :                 }
     907             :             }
     908             :             else
     909          18 :                 eAkt = EXC_STATE_END;
     910             :         }
     911             :         else
     912       66643 :             aIn.StartNextRecord();
     913             : 
     914       66736 :         if( !aIn.IsValid() )
     915             :         {
     916             :             // #i63591# finalize table if EOF is missing
     917           3 :             switch( eAkt )
     918             :             {
     919             :                 case EXC_STATE_SHEET_PRE:
     920           1 :                     eAkt = EXC_STATE_SHEET;
     921           1 :                     aIn.SeekGlobalPosition();
     922           1 :                     continue;   // next iteration in while loop
     923             :                 case EXC_STATE_SHEET:
     924           1 :                     Eof();
     925           1 :                     eAkt = EXC_STATE_END;
     926           1 :                 break;
     927             :                 default:
     928           1 :                     eAkt = EXC_STATE_END;
     929             :             }
     930             :         }
     931             : 
     932       66735 :         if( eAkt == EXC_STATE_END )
     933          20 :             break;
     934             : 
     935       66715 :         if( eAkt != EXC_STATE_SHEET_PRE && eAkt != EXC_STATE_GLOBALS_PRE )
     936       33123 :             pProgress->ProgressAbs( nProgressBaseSize + aIn.GetSvStreamPos() - nProgressBasePos );
     937             : 
     938       66715 :         sal_uInt16 nRecId = aIn.GetRecId();
     939             : 
     940             :         /*  #i39464# Ignore records between USERSVIEWBEGIN and USERSVIEWEND
     941             :             completely (user specific view settings). Otherwise view settings
     942             :             and filters are loaded multiple times, which at least causes
     943             :             problems in auto-filters. */
     944       66715 :         switch( nRecId )
     945             :         {
     946             :             case EXC_ID_USERSVIEWBEGIN:
     947             :                 OSL_ENSURE( !bInUserView, "ImportExcel8::Read - nested user view settings" );
     948           0 :                 bInUserView = true;
     949           0 :             break;
     950             :             case EXC_ID_USERSVIEWEND:
     951             :                 OSL_ENSURE( bInUserView, "ImportExcel8::Read - not in user view settings" );
     952           0 :                 bInUserView = false;
     953           0 :             break;
     954             :         }
     955             : 
     956       66715 :         if( !bInUserView ) switch( eAkt )
     957             :         {
     958             :             // ----------------------------------------------------------------
     959             :             // before workbook globals: wait for initial workbook globals BOF
     960             :             case EXC_STATE_BEFORE_GLOBALS:
     961             :             {
     962          25 :                 if( nRecId == EXC_ID5_BOF )
     963             :                 {
     964             :                     OSL_ENSURE( GetBiff() == EXC_BIFF8, "ImportExcel8::Read - wrong BIFF version" );
     965          20 :                     Bof5();
     966          20 :                     if( pExcRoot->eDateiTyp == Biff8W )
     967             :                     {
     968          19 :                         eAkt = EXC_STATE_GLOBALS_PRE;
     969          19 :                         maStrm.StoreGlobalPosition();
     970          19 :                         nBdshtTab = 0;
     971             :                     }
     972           1 :                     else if( pExcRoot->eDateiTyp == Biff8 )
     973             :                     {
     974             :                         // #i62752# possible to have BIFF8 sheet without globals
     975           0 :                         NeueTabelle();
     976           0 :                         eAkt = EXC_STATE_SHEET_PRE;  // Shrfmla Prefetch, Row-Prefetch
     977           0 :                         bSheetHasCodeName = false; // reset
     978           0 :                         aIn.StoreGlobalPosition();
     979             :                     }
     980             :                 }
     981             :             }
     982          25 :             break;
     983             : 
     984             :             // ----------------------------------------------------------------
     985             :             // prefetch for workbook globals
     986             :             case EXC_STATE_GLOBALS_PRE:
     987             :             {
     988        4881 :                 switch( nRecId )
     989             :                 {
     990             :                     case EXC_ID_EOF:
     991             :                     case EXC_ID_EXTSST:
     992             :                         /*  #i56376# evil hack: if EOF for globals is missing,
     993             :                             simulate it. This hack works only for the bugdoc
     994             :                             given in the issue, where the sheet substreams
     995             :                             start directly after the EXTSST record. A future
     996             :                             implementation should be more robust against
     997             :                             missing EOFs. */
     998          49 :                         if( (nRecId == EXC_ID_EOF) ||
     999          15 :                             ((nRecId == EXC_ID_EXTSST) && (maStrm.GetNextRecId() == EXC_ID5_BOF)) )
    1000             :                         {
    1001          19 :                             eAkt = EXC_STATE_GLOBALS;
    1002          19 :                             aIn.SeekGlobalPosition();
    1003             :                         }
    1004          34 :                         break;
    1005          11 :                     case 0x12:  DocProtect(); break;    // PROTECT      [    5678]
    1006          11 :                     case 0x13:  DocPasssword(); break;
    1007          11 :                     case 0x19:  WinProtection(); break;
    1008             :                     case 0x2F:                          // FILEPASS     [ 2345   ]
    1009           0 :                         eLastErr = XclImpDecryptHelper::ReadFilepass( maStrm );
    1010           0 :                         if( eLastErr != ERRCODE_NONE )
    1011           0 :                             eAkt = EXC_STATE_END;
    1012           0 :                         break;
    1013           0 :                     case EXC_ID_FILESHARING: ReadFileSharing();         break;
    1014          18 :                     case 0x3D:  Window1(); break;
    1015          18 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345   ]
    1016          76 :                     case 0x85:  Boundsheet(); break;    // BOUNDSHEET   [    5   ]
    1017          17 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345   ]
    1018             : 
    1019             :                     // PALETTE follows XFs, but already needed while reading the XFs
    1020           2 :                     case EXC_ID_PALETTE:        rPal.ReadPalette( maStrm );             break;
    1021             :                 }
    1022             :             }
    1023        4881 :             break;
    1024             : 
    1025             :             // ----------------------------------------------------------------
    1026             :             // workbook globals
    1027             :             case EXC_STATE_GLOBALS:
    1028             :             {
    1029        4674 :                 switch( nRecId )
    1030             :                 {
    1031             :                     case EXC_ID_EOF:
    1032             :                     case EXC_ID_EXTSST:
    1033             :                         /*  #i56376# evil hack: if EOF for globals is missing,
    1034             :                             simulate it. This hack works only for the bugdoc
    1035             :                             given in the issue, where the sheet substreams
    1036             :                             start directly after the EXTSST record. A future
    1037             :                             implementation should be more robust against
    1038             :                             missing EOFs. */
    1039          49 :                         if( (nRecId == EXC_ID_EOF) ||
    1040          15 :                             ((nRecId == EXC_ID_EXTSST) && (maStrm.GetNextRecId() == EXC_ID5_BOF)) )
    1041             :                         {
    1042          19 :                             rNumFmtBfr.CreateScFormats();
    1043          19 :                             rXFBfr.CreateUserStyles();
    1044          19 :                             rPTableMgr.ReadPivotCaches( maStrm );
    1045          19 :                             rNameMgr.ConvertAllTokens();
    1046          19 :                             eAkt = EXC_STATE_BEFORE_SHEET;
    1047             :                         }
    1048          34 :                     break;
    1049          17 :                     case 0x0E:  Precision(); break;     // PRECISION
    1050          18 :                     case 0x22:  Rec1904(); break;       // 1904         [ 2345   ]
    1051           0 :                     case 0x56:  Builtinfmtcnt(); break; // BUILTINFMTCNT[  34    ]
    1052          18 :                     case 0x8D:  Hideobj(); break;       // HIDEOBJ      [  345   ]
    1053           3 :                     case 0xD3:  SetHasBasic(); break;
    1054           0 :                     case 0xDE:  Olesize(); break;
    1055             : 
    1056           4 :                     case EXC_ID_CODENAME:       ReadCodeName( aIn, true );          break;
    1057          17 :                     case EXC_ID_USESELFS:       ReadUsesElfs();                     break;
    1058             : 
    1059         305 :                     case EXC_ID2_FONT:          rFontBfr.ReadFont( maStrm );        break;
    1060         174 :                     case EXC_ID4_FORMAT:        rNumFmtBfr.ReadFormat( maStrm );    break;
    1061        1719 :                     case EXC_ID5_XF:            rXFBfr.ReadXF( maStrm );            break;
    1062         426 :                     case EXC_ID_STYLE:          rXFBfr.ReadStyle( maStrm );         break;
    1063             : 
    1064          16 :                     case EXC_ID_SST:            rSst.ReadSst( maStrm );             break;
    1065          17 :                     case EXC_ID_TABID:          rTabInfo.ReadTabid( maStrm );       break;
    1066          39 :                     case EXC_ID_NAME:           rNameMgr.ReadName( maStrm );        break;
    1067             : 
    1068          11 :                     case EXC_ID_EXTERNSHEET:    rLinkMgr.ReadExternsheet( maStrm ); break;
    1069          11 :                     case EXC_ID_SUPBOOK:        rLinkMgr.ReadSupbook( maStrm );     break;
    1070           0 :                     case EXC_ID_XCT:            rLinkMgr.ReadXct( maStrm );         break;
    1071           0 :                     case EXC_ID_CRN:            rLinkMgr.ReadCrn( maStrm );         break;
    1072           0 :                     case EXC_ID_EXTERNNAME:     rLinkMgr.ReadExternname( maStrm, pFormConv );  break;
    1073             : 
    1074          12 :                     case EXC_ID_MSODRAWINGGROUP:rObjMgr.ReadMsoDrawingGroup( maStrm ); break;
    1075             : 
    1076           1 :                     case EXC_ID_SXIDSTM:        rPTableMgr.ReadSxidstm( maStrm );   break;
    1077           1 :                     case EXC_ID_SXVS:           rPTableMgr.ReadSxvs( maStrm );      break;
    1078           1 :                     case EXC_ID_DCONREF:        rPTableMgr.ReadDconref( maStrm );   break;
    1079           0 :                     case EXC_ID_DCONNAME:       rPTableMgr.ReadDConName( maStrm );  break;
    1080             :                 }
    1081             : 
    1082             :             }
    1083        4674 :             break;
    1084             : 
    1085             :             // ----------------------------------------------------------------
    1086             :             // prefetch for worksheet
    1087             :             case EXC_STATE_SHEET_PRE:
    1088             :             {
    1089       28711 :                 switch( nRecId )
    1090             :                 {
    1091             :                     // skip chart substream
    1092             :                     case EXC_ID2_BOF:
    1093             :                     case EXC_ID3_BOF:
    1094             :                     case EXC_ID4_BOF:
    1095          41 :                     case EXC_ID5_BOF:           XclTools::SkipSubStream( maStrm );      break;
    1096             : 
    1097          73 :                     case EXC_ID_WINDOW2:        rTabViewSett.ReadWindow2( maStrm, false );break;
    1098           1 :                     case EXC_ID_SCL:            rTabViewSett.ReadScl( maStrm );         break;
    1099          16 :                     case EXC_ID_PANE:           rTabViewSett.ReadPane( maStrm );        break;
    1100          87 :                     case EXC_ID_SELECTION:      rTabViewSett.ReadSelection( maStrm );   break;
    1101             : 
    1102             :                     case EXC_ID2_DIMENSIONS:
    1103          75 :                     case EXC_ID3_DIMENSIONS:    ReadDimensions();                       break;
    1104             : 
    1105          10 :                     case EXC_ID_CODENAME:       ReadCodeName( aIn, false ); bSheetHasCodeName = true; break;
    1106             : 
    1107             :                     case 0x0A:                          // EOF          [ 2345   ]
    1108             :                     {
    1109          74 :                         eAkt = EXC_STATE_SHEET;
    1110          74 :                         rtl::OUString sName;
    1111          74 :                         GetDoc().GetName( GetCurrScTab(), sName );
    1112          74 :                         if ( !bSheetHasCodeName )
    1113             :                         {
    1114          64 :                             nTabsWithNoCodeName.push_back( GetCurrScTab() );
    1115             :                             OSL_TRACE("No Codename for %d", GetCurrScTab() );
    1116             :                         }
    1117             :                         else
    1118             :                         {
    1119          10 :                             rtl::OUString sCodeName;
    1120          10 :                             GetDoc().GetCodeName( GetCurrScTab(), sCodeName );
    1121             :                             OSL_TRACE("Have CodeName %s for SheetName %s",
    1122             :                                 rtl::OUStringToOString( sCodeName, RTL_TEXTENCODING_UTF8 ).getStr(),  rtl::OUStringToOString( sName, RTL_TEXTENCODING_UTF8 ).getStr() );
    1123          10 :                             aCodeNames.push_back( sCodeName );
    1124             :                         }
    1125             : 
    1126          74 :                         bSheetHasCodeName = false; // reset
    1127             : 
    1128          74 :                         aIn.SeekGlobalPosition();         // und zurueck an alte Position
    1129          74 :                         break;
    1130             :                     }
    1131          12 :                     case 0x12:  SheetProtect(); break;
    1132           1 :                     case 0x13:  SheetPassword(); break;
    1133           0 :                     case 0x42:  Codepage(); break;      // CODEPAGE     [ 2345   ]
    1134          73 :                     case 0x55:  DefColWidth(); break;
    1135         278 :                     case 0x7D:  Colinfo(); break;       // COLINFO      [  345   ]
    1136          74 :                     case 0x81:  Wsbool(); break;        // WSBOOL       [ 2345   ]
    1137           0 :                     case 0x8C:  Country(); break;       // COUNTRY      [  345   ]
    1138           1 :                     case 0x99:  Standardwidth(); break; // STANDARDWIDTH[   45   ]
    1139           5 :                     case 0x9B:  FilterMode(); break;    // FILTERMODE
    1140           7 :                     case EXC_ID_AUTOFILTERINFO: AutoFilterInfo(); break;// AUTOFILTERINFO
    1141           5 :                     case EXC_ID_AUTOFILTER: AutoFilter(); break;    // AUTOFILTER
    1142        4596 :                     case 0x0208: Row34(); break;        // ROW          [  34    ]
    1143             :                     case EXC_ID2_ARRAY:
    1144           2 :                     case EXC_ID3_ARRAY: Array34(); break;      // ARRAY        [  34    ]
    1145          74 :                     case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[  345   ]
    1146          12 :                     case 0x04BC: Shrfmla(); break;      // SHRFMLA      [    5   ]
    1147          50 :                     case 0x0867: SheetProtection(); break; // SHEETPROTECTION
    1148             :                 }
    1149             :             }
    1150       28711 :             break;
    1151             : 
    1152             :             // ----------------------------------------------------------------
    1153             :             // worksheet
    1154             :             case EXC_STATE_SHEET:
    1155             :             {
    1156       28424 :                 switch( nRecId )
    1157             :                 {
    1158             :                     // skip unknown substreams
    1159             :                     case EXC_ID2_BOF:
    1160             :                     case EXC_ID3_BOF:
    1161             :                     case EXC_ID4_BOF:
    1162           0 :                     case EXC_ID5_BOF:           XclTools::SkipSubStream( maStrm );      break;
    1163             : 
    1164          74 :                     case EXC_ID_EOF:            Eof(); eAkt = EXC_STATE_BEFORE_SHEET;   break;
    1165             : 
    1166             :                     case EXC_ID2_BLANK:
    1167         666 :                     case EXC_ID3_BLANK:         ReadBlank();            break;
    1168           0 :                     case EXC_ID2_INTEGER:       ReadInteger();          break;
    1169             :                     case EXC_ID2_NUMBER:
    1170        1852 :                     case EXC_ID3_NUMBER:        ReadNumber();           break;
    1171             :                     case EXC_ID2_LABEL:
    1172           0 :                     case EXC_ID3_LABEL:         ReadLabel();            break;
    1173             :                     case EXC_ID2_BOOLERR:
    1174           0 :                     case EXC_ID3_BOOLERR:       ReadBoolErr();          break;
    1175        1950 :                     case EXC_ID_RK:             ReadRk();               break;
    1176             : 
    1177             :                     case EXC_ID2_FORMULA:
    1178             :                     case EXC_ID3_FORMULA:
    1179        2429 :                     case EXC_ID4_FORMULA:       Formula25();            break;
    1180          58 :                     case 0x000C:    Calccount();            break;  // CALCCOUNT
    1181          73 :                     case 0x0010:    Delta();                break;  // DELTA
    1182          73 :                     case 0x0011:    Iteration();            break;  // ITERATION
    1183             :                     case 0x007E:
    1184           0 :                     case 0x00AE:    Scenman();              break;  // SCENMAN
    1185           0 :                     case 0x00AF:    Scenario();             break;  // SCENARIO
    1186        2004 :                     case 0x00BD:    Mulrk();                break;  // MULRK        [    5   ]
    1187        1791 :                     case 0x00BE:    Mulblank();             break;  // MULBLANK     [    5   ]
    1188           0 :                     case 0x00D6:    Rstring();              break;  // RSTRING      [    5   ]
    1189          30 :                     case 0x00E5:    Cellmerging();          break;  // CELLMERGING
    1190       10470 :                     case 0x00FD:    Labelsst();             break;  // LABELSST     [      8 ]
    1191           0 :                     case 0x0236:    TableOp();              break;  // TABLE
    1192             : 
    1193             :                     case EXC_ID_HORPAGEBREAKS:
    1194           2 :                     case EXC_ID_VERPAGEBREAKS:  rPageSett.ReadPageBreaks( maStrm );     break;
    1195             :                     case EXC_ID_HEADER:
    1196         149 :                     case EXC_ID_FOOTER:         rPageSett.ReadHeaderFooter( maStrm );   break;
    1197             :                     case EXC_ID_LEFTMARGIN:
    1198             :                     case EXC_ID_RIGHTMARGIN:
    1199             :                     case EXC_ID_TOPMARGIN:
    1200         192 :                     case EXC_ID_BOTTOMMARGIN:   rPageSett.ReadMargin( maStrm );         break;
    1201          73 :                     case EXC_ID_PRINTHEADERS:   rPageSett.ReadPrintHeaders( maStrm );   break;
    1202          74 :                     case EXC_ID_PRINTGRIDLINES: rPageSett.ReadPrintGridLines( maStrm ); break;
    1203             :                     case EXC_ID_HCENTER:
    1204         150 :                     case EXC_ID_VCENTER:        rPageSett.ReadCenter( maStrm );         break;
    1205          75 :                     case EXC_ID_SETUP:          rPageSett.ReadSetup( maStrm );          break;
    1206           0 :                     case EXC_ID8_IMGDATA:       rPageSett.ReadImgData( maStrm );        break;
    1207             : 
    1208          50 :                     case EXC_ID_MSODRAWING:     GetCurrSheetDrawing().ReadMsoDrawing( maStrm ); break;
    1209             :                     // #i61786# weird documents: OBJ without MSODRAWING -> read in BIFF5 format
    1210           0 :                     case EXC_ID_OBJ:            GetCurrSheetDrawing().ReadObj( maStrm ); break;
    1211           1 :                     case EXC_ID_NOTE:           GetCurrSheetDrawing().ReadNote( maStrm ); break;
    1212             : 
    1213           8 :                     case EXC_ID_HLINK:          XclImpHyperlink::ReadHlink( maStrm );   break;
    1214           0 :                     case EXC_ID_LABELRANGES:    XclImpLabelranges::ReadLabelranges( maStrm ); break;
    1215             : 
    1216           3 :                     case EXC_ID_CONDFMT:        rCondFmtMgr.ReadCondfmt( maStrm );      break;
    1217          11 :                     case EXC_ID_CF:             rCondFmtMgr.ReadCF( maStrm );           break;
    1218             : 
    1219           2 :                     case EXC_ID_DVAL:           rValidMgr.ReadDval( maStrm );           break;
    1220           1 :                     case EXC_ID_DV:             rValidMgr.ReadDV( maStrm );             break;
    1221             : 
    1222           0 :                     case EXC_ID_QSI:            rWQBfr.ReadQsi( maStrm );               break;
    1223           0 :                     case EXC_ID_WQSTRING:       rWQBfr.ReadWqstring( maStrm );          break;
    1224           0 :                     case EXC_ID_PQRY:           rWQBfr.ReadParamqry( maStrm );          break;
    1225           0 :                     case EXC_ID_WQSETT:         rWQBfr.ReadWqsettings( maStrm );        break;
    1226           0 :                     case EXC_ID_WQTABLES:       rWQBfr.ReadWqtables( maStrm );          break;
    1227             : 
    1228           1 :                     case EXC_ID_SXVIEW:         rPTableMgr.ReadSxview( maStrm );    break;
    1229           2 :                     case EXC_ID_SXVD:           rPTableMgr.ReadSxvd( maStrm );      break;
    1230           6 :                     case EXC_ID_SXVI:           rPTableMgr.ReadSxvi( maStrm );      break;
    1231           1 :                     case EXC_ID_SXIVD:          rPTableMgr.ReadSxivd( maStrm );     break;
    1232           0 :                     case EXC_ID_SXPI:           rPTableMgr.ReadSxpi( maStrm );      break;
    1233           0 :                     case EXC_ID_SXDI:           rPTableMgr.ReadSxdi( maStrm );      break;
    1234           2 :                     case EXC_ID_SXVDEX:         rPTableMgr.ReadSxvdex( maStrm );    break;
    1235           1 :                     case EXC_ID_SXEX:           rPTableMgr.ReadSxex( maStrm );      break;
    1236           0 :                     case EXC_ID_SHEETEXT:       rTabViewSett.ReadTabBgColor( maStrm, rPal );    break;
    1237           1 :                     case EXC_ID_SXVIEWEX9:      rPTableMgr.ReadSxViewEx9( maStrm ); break;
    1238             :                 }
    1239             :             }
    1240       28424 :             break;
    1241             : 
    1242             :             // ----------------------------------------------------------------
    1243             :             default:;
    1244             :         }
    1245             :     }
    1246             : 
    1247          20 :     if( eLastErr == eERR_OK )
    1248             :     {
    1249             :         // In some strange circumstances a the codename might be missing
    1250             :         // # Create any missing Sheet CodeNames
    1251          20 :         std::vector < SCTAB >::iterator it_end = nTabsWithNoCodeName.end();
    1252          84 :         for ( std::vector < SCTAB >::iterator it = nTabsWithNoCodeName.begin(); it != it_end; ++it )
    1253             :         {
    1254          64 :             SCTAB nTab = 1;
    1255             :             OSL_TRACE("Trying to find suitable codename for %d", *it );
    1256         184 :             while ( true )
    1257             :             {
    1258         248 :                 rtl::OUStringBuffer aBuf;
    1259         248 :                 aBuf.appendAscii("Sheet");
    1260         248 :                 aBuf.append(static_cast<sal_Int32>(nTab++));
    1261         248 :                 rtl::OUString sTmpName = aBuf.makeStringAndClear();
    1262         248 :                 std::vector<rtl::OUString>::iterator codeName_It = aCodeNames.begin();
    1263         248 :                 std::vector<rtl::OUString>::iterator codeName_It_end = aCodeNames.end();
    1264             :                 // search for codename
    1265        1070 :                 for ( ; codeName_It != codeName_It_end; ++codeName_It )
    1266             :                 {
    1267        1006 :                     if ( *codeName_It == sTmpName )
    1268         184 :                         break;
    1269             :                 }
    1270             : 
    1271         248 :                 if ( codeName_It == codeName_It_end ) // generated codename not found
    1272             :                 {
    1273             :                     OSL_TRACE("Using generated codename %s", rtl::OUStringToOString( sTmpName, RTL_TEXTENCODING_UTF8 ).getStr() );
    1274             :                     // Set new codename
    1275          64 :                     GetDoc().SetCodeName( *it, sTmpName );
    1276             :                     // Record newly used codename
    1277          64 :                     aCodeNames.push_back(sTmpName);
    1278             :                     // Record those we have created so they can be created in
    1279             :                     // basic
    1280          64 :                     maAutoGeneratedCodeNames.push_back( sTmpName );
    1281             :                     break;
    1282             :                 }
    1283         248 :             }
    1284             : 
    1285             :         }
    1286             :         // #i45843# Convert pivot tables before calculation, so they are available
    1287             :         // for the GETPIVOTDATA function.
    1288          20 :         if( GetBiff() == EXC_BIFF8 )
    1289          20 :             GetPivotTableManager().ConvertPivotTables();
    1290             : 
    1291          20 :         pProgress.reset();
    1292             : #if 0
    1293             :         // Excel documents look much better without this call; better in the
    1294             :         // sense that the row heights are identical to the original heights in
    1295             :         // Excel.
    1296             :         if (pD->IsAdjustHeightEnabled())
    1297             :             AdjustRowHeight();
    1298             : #endif
    1299          20 :         PostDocLoad();
    1300             : 
    1301          20 :         pD->CalcAfterLoad();
    1302             : 
    1303             :         // import change tracking data
    1304          20 :         XclImpChangeTrack aImpChTr( GetRoot(), maStrm );
    1305          20 :         aImpChTr.Apply();
    1306             : 
    1307          20 :         const XclImpAddressConverter& rAddrConv = GetAddressConverter();
    1308          20 :         if( rAddrConv.IsTabTruncated() )
    1309           0 :             eLastErr = SCWARN_IMPORT_SHEET_OVERFLOW;
    1310          20 :         else if( bTabTruncated || rAddrConv.IsRowTruncated() )
    1311           0 :             eLastErr = SCWARN_IMPORT_ROW_OVERFLOW;
    1312          20 :         else if( rAddrConv.IsColTruncated() )
    1313           1 :             eLastErr = SCWARN_IMPORT_COLUMN_OVERFLOW;
    1314             : 
    1315          20 :         if( GetBiff() == EXC_BIFF8 )
    1316          20 :             GetPivotTableManager().MaybeRefreshPivotTables();
    1317             :     }
    1318             : 
    1319          20 :     return eLastErr;
    1320           9 : }
    1321             : 
    1322             : //___________________________________________________________________
    1323             : 
    1324             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10