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

Generated by: LCOV version 1.10