1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: read.cxx,v $
10 * $Revision: 1.70.88.4 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sc.hxx"
36 //------------------------------------------------------------------------
41 #include "document.hxx"
42 #include "scerrors.hxx"
43 #include "fprogressbar.hxx"
44 #include "xltracer.hxx"
45 #include "xltable.hxx"
46 #include "xihelper.hxx"
51 #include "xicontent.hxx"
52 #include "xiescher.hxx"
53 #include "xipivot.hxx"
54 #include "XclImpChangeTrack.hxx"
57 #include "biffdump.hxx"
59 #include "excimp8.hxx"
61 FltError
ImportExcel::Read( void )
65 Biff8RecDumper
aDumper( GetRoot(), FALSE
);
66 if( aDumper
.Dump( aIn
) )
71 XclImpPageSettings
& rPageSett
= GetPageSettings();
72 XclImpTabViewSettings
& rTabViewSett
= GetTabViewSettings();
73 XclImpPalette
& rPal
= GetPalette();
74 XclImpFontBuffer
& rFontBfr
= GetFontBuffer();
75 XclImpNumFmtBuffer
& rNumFmtBfr
= GetNumFmtBuffer();
76 XclImpXFBuffer
& rXFBfr
= GetXFBuffer();
77 XclImpNameManager
& rNameMgr
= GetNameManager();
78 XclImpObjectManager
& rObjMgr
= GetObjectManager();
81 Z_BiffNull
, // Nicht in gueltigem Biff-Format
82 Z_Biff2
, // Biff2: nur eine Tabelle
84 Z_Biff3
, // Biff3: nur eine Tabelle
86 Z_Biff4
, // Biff4: nur eine Tabelle
87 Z_Biff4W
, // Biff4 Workbook: Globals
88 Z_Biff4T
, // Biff4 Workbook: eine Tabelle selbst
89 Z_Biff4E
, // Biff4 Workbook: zwischen den Tabellen
91 Z_Biff5WPre
,// Biff5: Prefetch Workbook
92 Z_Biff5W
, // Biff5: Globals
93 Z_Biff5TPre
,// Biff5: Prefetch fuer Shrfmla/Array Formula
94 Z_Biff5T
, // Biff5: eine Tabelle selbst
95 Z_Biff5E
, // Biff5: zwischen den Tabellen
96 Z_Biffn0
, // Alle Biffs: Tabelle bis naechstesss EOF ueberlesen
99 Zustand eAkt
= Z_BiffNull
, ePrev
= Z_BiffNull
;
101 FltError eLastErr
= eERR_OK
;
103 UINT16 nBofLevel
= 0;
104 BOOL bBiff4Workbook
= FALSE
;
106 DBG_ASSERT( &aIn
!= NULL
, "-ImportExcel::Read(): Kein Stream - wie dass?!" );
108 ::std::auto_ptr
< ScfSimpleProgressBar
> pProgress( new ScfSimpleProgressBar(
109 aIn
.GetSvStreamSize(), GetDocShell(), STR_LOAD_DOC
) );
111 while( eAkt
!= Z_Ende
)
113 aIn
.StartNextRecord();
114 nOpcode
= aIn
.GetRecId();
118 // #124240# finalize table if EOF is missing
127 rNumFmtBfr
.CreateScFormats();
136 if( eAkt
!= Z_Biff5TPre
&& eAkt
!= Z_Biff5WPre
)
137 pProgress
->ProgressAbs( aIn
.GetSvStreamPos() );
141 // ----------------------------------------------------------------
142 case Z_BiffNull
: // ------------------------------- Z_BiffNull -
151 // #i23425# don't rely on the record ID, but on the detected BIFF version
156 if( pExcRoot
->eDateiTyp
== Biff2
)
164 if( pExcRoot
->eDateiTyp
== Biff3
)
172 if( pExcRoot
->eDateiTyp
== Biff4
)
177 else if( pExcRoot
->eDateiTyp
== Biff4W
)
180 bBiff4Workbook
= TRUE
;
185 if( pExcRoot
->eDateiTyp
== Biff5W
)
191 aIn
.StoreGlobalPosition(); // und Position merken
193 else if( pExcRoot
->eDateiTyp
== Biff5
)
195 // #i62752# possible to have BIFF5 sheet without globals
197 eAkt
= Z_Biff5TPre
; // Shrfmla Prefetch, Row-Prefetch
199 aIn
.StoreGlobalPosition(); // und Position merken
210 // ----------------------------------------------------------------
211 case Z_Biff2
: // ---------------------------------- Z_Biff2 -
215 case EXC_ID2_DIMENSIONS
:
216 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
218 case EXC_ID3_BLANK
: ReadBlank(); break;
219 case EXC_ID2_INTEGER
: ReadInteger(); break;
221 case EXC_ID3_NUMBER
: ReadNumber(); break;
223 case EXC_ID3_LABEL
: ReadLabel(); break;
224 case EXC_ID2_BOOLERR
:
225 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
226 case EXC_ID_RK
: ReadRk(); break;
228 case 0x06: Formula25(); break; // FORMULA [ 2 5]
229 case 0x08: Row25(); break; // ROW [ 2 5]
230 case 0x0A: // EOF [ 2345]
231 rNumFmtBfr
.CreateScFormats();
236 case 0x15: rPageSett
.ReadHeaderFooter( maStrm
); break;
237 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
238 case 0x18: rNameMgr
.ReadName( maStrm
); break;
239 case 0x1C: rObjMgr
.ReadNote( maStrm
); break;
240 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
241 case 0x1E: rNumFmtBfr
.ReadFormat( maStrm
); break;
242 case 0x20: Columndefault(); break; // COLUMNDEFAULT[ 2 ]
243 case 0x21: Array25(); break; // ARRAY [ 2 5]
244 case 0x23: Externname25(); break; // EXTERNNAME [ 2 5]
245 case 0x24: Colwidth(); break; // COLWIDTH [ 2 ]
246 case 0x25: Defrowheight2(); break; // DEFAULTROWHEI[ 2 ]
250 case 0x29: rPageSett
.ReadMargin( maStrm
); break;
251 case 0x2A: rPageSett
.ReadPrintHeaders( maStrm
); break;
252 case 0x2B: rPageSett
.ReadPrintGridLines( maStrm
); break;
253 case 0x2F: // FILEPASS [ 2345]
254 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
255 if( eLastErr
!= ERRCODE_NONE
)
258 case EXC_ID2_FONT
: rFontBfr
.ReadFont( maStrm
); break;
259 case EXC_ID_EFONT
: rFontBfr
.ReadEfont( maStrm
); break;
260 case 0x3E: rTabViewSett
.ReadWindow2( maStrm
, false );break;
261 case 0x41: rTabViewSett
.ReadPane( maStrm
); break;
262 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
263 case 0x43: rXFBfr
.ReadXF( maStrm
); break;
264 case 0x44: Ixfe(); break; // IXFE [ 2 ]
268 // ----------------------------------------------------------------
269 case Z_Biff3
: // ---------------------------------- Z_Biff3 -
273 // skip chart substream
277 case EXC_ID5_BOF
: XclTools::SkipSubStream( maStrm
); break;
279 case EXC_ID2_DIMENSIONS
:
280 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
282 case EXC_ID3_BLANK
: ReadBlank(); break;
283 case EXC_ID2_INTEGER
: ReadInteger(); break;
285 case EXC_ID3_NUMBER
: ReadNumber(); break;
287 case EXC_ID3_LABEL
: ReadLabel(); break;
288 case EXC_ID2_BOOLERR
:
289 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
290 case EXC_ID_RK
: ReadRk(); break;
292 case 0x0A: // EOF [ 2345]
293 rNumFmtBfr
.CreateScFormats();
298 case 0x15: rPageSett
.ReadHeaderFooter( maStrm
); break;
299 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
301 case 0x1B: rPageSett
.ReadPageBreaks( maStrm
); break;
302 case 0x1C: rObjMgr
.ReadNote( maStrm
); break;
303 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
304 case 0x1E: rNumFmtBfr
.ReadFormat( maStrm
); break;
305 case 0x22: Rec1904(); break; // 1904 [ 2345]
309 case 0x29: rPageSett
.ReadMargin( maStrm
); break;
310 case 0x2A: rPageSett
.ReadPrintHeaders( maStrm
); break;
311 case 0x2B: rPageSett
.ReadPrintGridLines( maStrm
); break;
312 case 0x2F: // FILEPASS [ 2345]
313 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
314 if( eLastErr
!= ERRCODE_NONE
)
317 case 0x41: rTabViewSett
.ReadPane( maStrm
); break;
318 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
319 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
320 case 0x5D: rObjMgr
.ReadObj( maStrm
); break;
321 case 0x7D: Colinfo(); break; // COLINFO [ 345]
322 case 0x8C: Country(); break; // COUNTRY [ 345]
323 case 0x92: rPal
.ReadPalette( maStrm
); break;
324 case 0x0206: Formula3(); break; // FORMULA [ 3 ]
325 case 0x0208: Row34(); break; // ROW [ 34 ]
326 case 0x0218: rNameMgr
.ReadName( maStrm
); break;
327 case 0x0221: Array34(); break; // ARRAY [ 34 ]
328 case 0x0223: Externname34(); break; // EXTERNNAME [ 34 ]
329 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345]
330 case 0x0231: rFontBfr
.ReadFont( maStrm
); break;
331 case 0x023E: rTabViewSett
.ReadWindow2( maStrm
, false );break;
332 case 0x0243: rXFBfr
.ReadXF( maStrm
); break;
333 case 0x0293: rXFBfr
.ReadStyle( maStrm
); break;
337 // ----------------------------------------------------------------
338 case Z_Biff4
: // ---------------------------------- Z_Biff4 -
342 // skip chart substream
346 case EXC_ID5_BOF
: XclTools::SkipSubStream( maStrm
); break;
348 case EXC_ID2_DIMENSIONS
:
349 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
351 case EXC_ID3_BLANK
: ReadBlank(); break;
352 case EXC_ID2_INTEGER
: ReadInteger(); break;
354 case EXC_ID3_NUMBER
: ReadNumber(); break;
356 case EXC_ID3_LABEL
: ReadLabel(); break;
357 case EXC_ID2_BOOLERR
:
358 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
359 case EXC_ID_RK
: ReadRk(); break;
361 case 0x0A: // EOF [ 2345]
362 rNumFmtBfr
.CreateScFormats();
366 case 0x12: SheetProtect(); break; // SHEET PROTECTION
368 case 0x15: rPageSett
.ReadHeaderFooter( maStrm
); break;
369 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
371 case 0x1B: rPageSett
.ReadPageBreaks( maStrm
); break;
372 case 0x1C: rObjMgr
.ReadNote( maStrm
); break;
373 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
374 case 0x22: Rec1904(); break; // 1904 [ 2345]
378 case 0x29: rPageSett
.ReadMargin( maStrm
); break;
379 case 0x2A: rPageSett
.ReadPrintHeaders( maStrm
); break;
380 case 0x2B: rPageSett
.ReadPrintGridLines( maStrm
); break;
381 case 0x2F: // FILEPASS [ 2345]
382 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
383 if( eLastErr
!= ERRCODE_NONE
)
386 case 0x41: rTabViewSett
.ReadPane( maStrm
); break;
387 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
388 case 0x55: DefColWidth(); break;
389 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
390 case 0x5D: rObjMgr
.ReadObj( maStrm
); break;
391 case 0x7D: Colinfo(); break; // COLINFO [ 345]
392 case 0x8C: Country(); break; // COUNTRY [ 345]
393 case 0x92: rPal
.ReadPalette( maStrm
); break;
394 case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45]
395 case 0xA1: rPageSett
.ReadSetup( maStrm
); break;
396 case 0x0208: Row34(); break; // ROW [ 34 ]
397 case 0x0218: rNameMgr
.ReadName( maStrm
); break;
398 case 0x0221: Array34(); break; // ARRAY [ 34 ]
399 case 0x0223: Externname34(); break; // EXTERNNAME [ 34 ]
400 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345]
401 case 0x0231: rFontBfr
.ReadFont( maStrm
); break;
402 case 0x023E: rTabViewSett
.ReadWindow2( maStrm
, false );break;
403 case 0x0406: Formula4(); break; // FORMULA [ 4 ]
404 case 0x041E: rNumFmtBfr
.ReadFormat( maStrm
); break;
405 case 0x0443: rXFBfr
.ReadXF( maStrm
); break;
406 case 0x0293: rXFBfr
.ReadStyle( maStrm
); break;
410 // ----------------------------------------------------------------
411 case Z_Biff4W
: // --------------------------------- Z_Biff4W -
415 case 0x0A: // EOF [ 2345]
418 case 0x12: DocProtect(); break; // PROTECT [ 5]
419 case 0x2F: // FILEPASS [ 2345]
420 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
421 if( eLastErr
!= ERRCODE_NONE
)
424 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
425 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
426 case 0x55: DefColWidth(); break;
427 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
428 case 0x8C: Country(); break; // COUNTRY [ 345]
429 case 0x8F: Bundleheader(); break; // BUNDLEHEADER [ 4 ]
430 case 0x92: rPal
.ReadPalette( maStrm
); break;
431 case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45]
432 case 0x0218: rNameMgr
.ReadName( maStrm
); break;
433 case 0x0223: Externname34(); break; // EXTERNNAME [ 34 ]
434 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345]
435 case 0x0231: rFontBfr
.ReadFont( maStrm
); break;
436 case 0x0409: // BOF [ 4 ]
438 if( pExcRoot
->eDateiTyp
== Biff4
)
446 case 0x041E: rNumFmtBfr
.ReadFormat( maStrm
); break;
447 case 0x0443: rXFBfr
.ReadXF( maStrm
); break;
448 case 0x0293: rXFBfr
.ReadStyle( maStrm
); break;
453 // ----------------------------------------------------------------
454 case Z_Biff4T
: // --------------------------------- Z_Biff4T -
458 // skip chart substream
462 case EXC_ID5_BOF
: XclTools::SkipSubStream( maStrm
); break;
464 case EXC_ID2_DIMENSIONS
:
465 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
467 case EXC_ID3_BLANK
: ReadBlank(); break;
468 case EXC_ID2_INTEGER
: ReadInteger(); break;
470 case EXC_ID3_NUMBER
: ReadNumber(); break;
472 case EXC_ID3_LABEL
: ReadLabel(); break;
473 case EXC_ID2_BOOLERR
:
474 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
475 case EXC_ID_RK
: ReadRk(); break;
477 case 0x0A: // EOF [ 2345]
481 case 0x12: SheetProtect(); break; // SHEET PROTECTION
483 case 0x15: rPageSett
.ReadHeaderFooter( maStrm
); break;
485 case 0x1B: rPageSett
.ReadPageBreaks( maStrm
); break;
486 case 0x1C: rObjMgr
.ReadNote( maStrm
); break;
487 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
488 case 0x2F: // FILEPASS [ 2345]
489 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
490 if( eLastErr
!= ERRCODE_NONE
)
493 case 0x41: rTabViewSett
.ReadPane( maStrm
); break;
494 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
495 case 0x55: DefColWidth(); break;
496 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
497 case 0x5D: rObjMgr
.ReadObj( maStrm
); break;
498 case 0x7D: Colinfo(); break; // COLINFO [ 345]
499 case 0x8C: Country(); break; // COUNTRY [ 345]
500 case 0x8F: Bundleheader(); break; // BUNDLEHEADER [ 4 ]
501 case 0x92: rPal
.ReadPalette( maStrm
); break;
502 case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45]
503 case 0xA1: rPageSett
.ReadSetup( maStrm
); break;
504 case 0x0208: Row34(); break; // ROW [ 34 ]
505 case 0x0218: rNameMgr
.ReadName( maStrm
); break;
506 case 0x0221: Array34(); break;
507 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345]
508 case 0x0231: rFontBfr
.ReadFont( maStrm
); break;
509 case 0x023E: rTabViewSett
.ReadWindow2( maStrm
, false );break;
510 case 0x0406: Formula4(); break;
511 case 0x041E: rNumFmtBfr
.ReadFormat( maStrm
); break;
512 case 0x0443: rXFBfr
.ReadXF( maStrm
); break;
513 case 0x0293: rXFBfr
.ReadStyle( maStrm
); break;
518 // ----------------------------------------------------------------
519 case Z_Biff4E
: // --------------------------------- Z_Biff4E -
523 case 0x0A: // EOF [ 2345]
526 case 0x8F: break; // BUNDLEHEADER [ 4 ]
527 case 0x0409: // BOF [ 4 ]
530 if( pExcRoot
->eDateiTyp
== Biff4
)
544 case Z_Biff5WPre
: // ------------------------------ Z_Biff5WPre -
548 case 0x0A: // EOF [ 2345]
550 aIn
.SeekGlobalPosition(); // und zurueck an alte Position
552 case 0x12: DocProtect(); break; // PROTECT [ 5]
553 case 0x2F: // FILEPASS [ 2345]
554 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
555 if( eLastErr
!= ERRCODE_NONE
)
558 case 0x3D: Window1(); break;
559 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
560 case 0x85: Boundsheet(); break; // BOUNDSHEET [ 5]
561 case 0x8C: Country(); break; // COUNTRY [ 345]
562 // PALETTE follows XFs, but already needed while reading the XFs
563 case 0x92: rPal
.ReadPalette( maStrm
); break;
567 case Z_Biff5W
: // --------------------------------- Z_Biff5W -
571 case 0x0A: // EOF [ 2345]
572 rNumFmtBfr
.CreateScFormats();
573 rXFBfr
.CreateUserStyles();
576 case 0x18: rNameMgr
.ReadName( maStrm
); break;
577 case 0x1E: rNumFmtBfr
.ReadFormat( maStrm
); break;
578 case 0x22: Rec1904(); break; // 1904 [ 2345]
579 case 0x31: rFontBfr
.ReadFont( maStrm
); break;
580 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
581 case 0x8D: Hideobj(); break; // HIDEOBJ [ 345]
582 case 0xDE: Olesize(); break;
583 case 0xE0: rXFBfr
.ReadXF( maStrm
); break;
584 case 0x0293: rXFBfr
.ReadStyle( maStrm
); break;
585 case 0x041E: rNumFmtBfr
.ReadFormat( maStrm
); break;
590 // ----------------------------------------------------------------
591 case Z_Biff5TPre
: // ------------------------------- Z_Biff5Pre -
593 if( nOpcode
== 0x0809 )
595 else if( (nOpcode
== 0x000A) && nBofLevel
)
597 else if( !nBofLevel
) // don't read chart records
601 case EXC_ID2_DIMENSIONS
:
602 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
603 case 0x08: Row25(); break; // ROW [ 2 5]
604 case 0x0A: // EOF [ 2345]
606 aIn
.SeekGlobalPosition(); // und zurueck an alte Position
608 case 0x12: SheetProtect(); break; // SHEET PROTECTION
610 case 0x1B: rPageSett
.ReadPageBreaks( maStrm
); break;
611 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
612 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
613 case 0x21: Array25(); break; // ARRAY [ 2 5]
614 case 0x23: Externname25(); break; // EXTERNNAME [ 2 5]
615 case 0x41: rTabViewSett
.ReadPane( maStrm
); break;
616 case 0x42: Codepage(); break; // CODEPAGE [ 2345]
617 case 0x55: DefColWidth(); break;
618 case 0x7D: Colinfo(); break; // COLINFO [ 345]
619 case 0x81: Wsbool(); break; // WSBOOL [ 2345]
620 case 0x8C: Country(); break; // COUNTRY [ 345]
621 case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45]
622 case 0x0208: Row34(); break; // ROW [ 34 ]
623 case 0x0221: Array34(); break; // ARRAY [ 34 ]
624 case 0x0223: Externname34(); break; // EXTERNNAME [ 34 ]
625 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345]
626 case 0x023E: rTabViewSett
.ReadWindow2( maStrm
, false );break;
627 case 0x04BC: Shrfmla(); break; // SHRFMLA [ 5]
632 // ----------------------------------------------------------------
633 case Z_Biff5T
: // --------------------------------- Z_Biff5T -
638 case EXC_ID3_BLANK
: ReadBlank(); break;
639 case EXC_ID2_INTEGER
: ReadInteger(); break;
641 case EXC_ID3_NUMBER
: ReadNumber(); break;
643 case EXC_ID3_LABEL
: ReadLabel(); break;
644 case EXC_ID2_BOOLERR
:
645 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
646 case EXC_ID_RK
: ReadRk(); break;
650 case 0x0406: Formula25(); break;
651 case 0x0A: Eof(); eAkt
= Z_Biff5E
; break;
653 case 0x15: rPageSett
.ReadHeaderFooter( maStrm
); break;
654 case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
655 case 0x1C: rObjMgr
.ReadNote( maStrm
); break;
656 case 0x1D: rTabViewSett
.ReadSelection( maStrm
); break;
657 case 0x23: Externname25(); break; // EXTERNNAME [ 2 5]
661 case 0x29: rPageSett
.ReadMargin( maStrm
); break;
662 case 0x2A: rPageSett
.ReadPrintHeaders( maStrm
); break;
663 case 0x2B: rPageSett
.ReadPrintGridLines( maStrm
); break;
664 case 0x2F: // FILEPASS [ 2345]
665 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
666 if( eLastErr
!= ERRCODE_NONE
)
669 case 0x5D: rObjMgr
.ReadObj( maStrm
); break;
671 case 0x84: rPageSett
.ReadCenter( maStrm
); break;
672 case 0xA0: rTabViewSett
.ReadScl( maStrm
); break;
673 case 0xA1: rPageSett
.ReadSetup( maStrm
); break;
674 case 0xBD: Mulrk(); break; // MULRK [ 5]
675 case 0xBE: Mulblank(); break; // MULBLANK [ 5]
676 case 0xD6: Rstring(); break; // RSTRING [ 5]
677 case 0x00E5: Cellmerging(); break; // #i62300#
678 case 0x0236: TableOp(); break; // TABLE [ 5]
679 case 0x0809: // BOF [ 5]
680 XclTools::SkipSubStream( maStrm
);
686 // ----------------------------------------------------------------
687 case Z_Biff5E
: // --------------------------------- Z_Biff5E -
691 case 0x0809: // BOF [ 5]
694 switch( pExcRoot
->eDateiTyp
)
698 eAkt
= Z_Biff5TPre
; // Shrfmla Prefetch, Row-Prefetch
700 aIn
.StoreGlobalPosition(); // und Position merken
702 case Biff5C
: // chart sheet
703 GetObjectManager().ReadTabChart( maStrm
);
705 GetTracer().TraceChartOnlySheet();
709 pD
->SetVisible( GetCurrScTab(), FALSE
);
713 DBG_ASSERT( pExcRoot
->eDateiTyp
!= Biff5W
,
714 "+ImportExcel::Read(): Doppel-Whopper-Workbook!" );
721 case Z_Biffn0
: // --------------------------------- Z_Biffn0 -
725 case 0x0A: // EOF [ 2345]
733 // ----------------------------------------------------------------
734 case Z_Ende
: // ----------------------------------- Z_Ende -
735 DBG_ERROR( "*ImportExcel::Read(): Not possible state!" );
737 default: DBG_ERROR( "-ImportExcel::Read(): Zustand vergessen!" );
741 if( eLastErr
== eERR_OK
)
750 const XclImpAddressConverter
& rAddrConv
= GetAddressConverter();
751 if( rAddrConv
.IsTabTruncated() )
752 eLastErr
= SCWARN_IMPORT_SHEET_OVERFLOW
;
753 else if( bTabTruncated
|| rAddrConv
.IsRowTruncated() )
754 eLastErr
= SCWARN_IMPORT_ROW_OVERFLOW
;
755 else if( rAddrConv
.IsColTruncated() )
756 eLastErr
= SCWARN_IMPORT_COLUMN_OVERFLOW
;
763 //___________________________________________________________________
765 FltError
ImportExcel8::Read( void )
769 Biff8RecDumper
aDumper( GetRoot(), TRUE
);
770 if( aDumper
.Dump( aIn
) )
771 return ERRCODE_ABORT
;
774 // read the entire BIFF8 stream
775 // don't look too close - this stuff seriously needs to be reworked
777 XclImpPageSettings
& rPageSett
= GetPageSettings();
778 XclImpTabViewSettings
& rTabViewSett
= GetTabViewSettings();
779 XclImpPalette
& rPal
= GetPalette();
780 XclImpFontBuffer
& rFontBfr
= GetFontBuffer();
781 XclImpNumFmtBuffer
& rNumFmtBfr
= GetNumFmtBuffer();
782 XclImpXFBuffer
& rXFBfr
= GetXFBuffer();
783 XclImpSst
& rSst
= GetSst();
784 XclImpTabInfo
& rTabInfo
= GetTabInfo();
785 XclImpNameManager
& rNameMgr
= GetNameManager();
786 XclImpLinkManager
& rLinkMgr
= GetLinkManager();
787 XclImpObjectManager
& rObjMgr
= GetObjectManager();
788 XclImpCondFormatManager
& rCondFmtMgr
= GetCondFormatManager();
789 XclImpPivotTableManager
& rPTableMgr
= GetPivotTableManager();
790 XclImpWebQueryBuffer
& rWQBfr
= GetWebQueryBuffer();
792 bool bInUserView
= false; // true = In USERSVIEW(BEGIN|END) record block.
796 EXC_STATE_BEFORE_GLOBALS
, /// Before workbook globals (wait for initial BOF).
797 EXC_STATE_GLOBALS_PRE
, /// Prefetch for workbook globals.
798 EXC_STATE_GLOBALS
, /// Workbook globals.
799 EXC_STATE_BEFORE_SHEET
, /// Before worksheet (wait for new worksheet BOF).
800 EXC_STATE_SHEET_PRE
, /// Prefetch for worksheet.
801 EXC_STATE_SHEET
, /// Worksheet.
802 EXC_STATE_END
/// Stop reading.
805 XclImpReadState eAkt
= EXC_STATE_BEFORE_GLOBALS
;
807 FltError eLastErr
= eERR_OK
;
809 ::std::auto_ptr
< ScfSimpleProgressBar
> pProgress( new ScfSimpleProgressBar(
810 aIn
.GetSvStreamSize(), GetDocShell(), STR_LOAD_DOC
) );
812 bool bSheetHasCodeName
= false;
814 std::vector
< String
> CodeNames
;
816 std::vector
< SCTAB
> nTabsWithNoCodeName
;
818 while( eAkt
!= EXC_STATE_END
)
820 aIn
.StartNextRecord();
823 // #124240# #i63591# finalize table if EOF is missing
826 case EXC_STATE_SHEET_PRE
:
827 eAkt
= EXC_STATE_SHEET
;
828 aIn
.SeekGlobalPosition();
829 continue; // next iteration in while loop
830 // break; // unxsols warning: statement unreachable
831 case EXC_STATE_SHEET
:
833 eAkt
= EXC_STATE_END
;
836 eAkt
= EXC_STATE_END
;
840 if( eAkt
== EXC_STATE_END
)
843 if( eAkt
!= EXC_STATE_SHEET_PRE
&& eAkt
!= EXC_STATE_GLOBALS_PRE
)
844 pProgress
->ProgressAbs( aIn
.GetSvStreamPos() );
846 sal_uInt16 nRecId
= aIn
.GetRecId();
848 /* #i39464# Ignore records between USERSVIEWBEGIN and USERSVIEWEND
849 completely (user specific view settings). Otherwise view settings
850 and filters are loaded multiple times, which at least causes
851 problems in auto-filters. */
854 case EXC_ID_USERSVIEWBEGIN
:
855 DBG_ASSERT( !bInUserView
, "ImportExcel8::Read - nested user view settings" );
858 case EXC_ID_USERSVIEWEND
:
859 DBG_ASSERT( bInUserView
, "ImportExcel8::Read - not in user view settings" );
864 if( !bInUserView
) switch( eAkt
)
866 // ----------------------------------------------------------------
867 // before workbook globals: wait for initial workbook globals BOF
868 case EXC_STATE_BEFORE_GLOBALS
:
870 if( nRecId
== EXC_ID5_BOF
)
872 DBG_ASSERT( GetBiff() == EXC_BIFF8
, "ImportExcel8::Read - wrong BIFF version" );
874 if( pExcRoot
->eDateiTyp
== Biff8W
)
876 eAkt
= EXC_STATE_GLOBALS_PRE
;
877 maStrm
.StoreGlobalPosition();
880 else if( pExcRoot
->eDateiTyp
== Biff8
)
882 // #i62752# possible to have BIFF8 sheet without globals
884 eAkt
= EXC_STATE_SHEET_PRE
; // Shrfmla Prefetch, Row-Prefetch
885 bSheetHasCodeName
= false; // reset
886 aIn
.StoreGlobalPosition();
892 // ----------------------------------------------------------------
893 // prefetch for workbook globals
894 case EXC_STATE_GLOBALS_PRE
:
900 /* #i56376# evil hack: if EOF for globals is missing,
901 simulate it. This hack works only for the bugdoc
902 given in the issue, where the sheet substreams
903 start directly after the EXTSST record. A future
904 implementation should be more robust against
906 if( (nRecId
== EXC_ID_EOF
) ||
907 ((nRecId
== EXC_ID_EXTSST
) && (maStrm
.GetNextRecId() == EXC_ID5_BOF
)) )
909 eAkt
= EXC_STATE_GLOBALS
;
910 aIn
.SeekGlobalPosition();
913 case 0x12: DocProtect(); break; // PROTECT [ 5678]
914 case 0x13: DocPasssword(); break;
915 case 0x19: WinProtection(); break;
916 case 0x2F: // FILEPASS [ 2345 ]
917 eLastErr
= XclImpDecryptHelper::ReadFilepass( maStrm
);
918 if( eLastErr
!= ERRCODE_NONE
)
919 eAkt
= EXC_STATE_END
;
921 case 0x3D: Window1(); break;
922 case 0x42: Codepage(); break; // CODEPAGE [ 2345 ]
923 case 0x85: Boundsheet(); break; // BOUNDSHEET [ 5 ]
924 case 0x8C: Country(); break; // COUNTRY [ 345 ]
926 // PALETTE follows XFs, but already needed while reading the XFs
927 case EXC_ID_PALETTE
: rPal
.ReadPalette( maStrm
); break;
932 // ----------------------------------------------------------------
934 case EXC_STATE_GLOBALS
:
940 /* #i56376# evil hack: if EOF for globals is missing,
941 simulate it. This hack works only for the bugdoc
942 given in the issue, where the sheet substreams
943 start directly after the EXTSST record. A future
944 implementation should be more robust against
946 if( (nRecId
== EXC_ID_EOF
) ||
947 ((nRecId
== EXC_ID_EXTSST
) && (maStrm
.GetNextRecId() == EXC_ID5_BOF
)) )
949 rNumFmtBfr
.CreateScFormats();
950 rXFBfr
.CreateUserStyles();
951 rPTableMgr
.ReadPivotCaches( maStrm
);
952 eAkt
= EXC_STATE_BEFORE_SHEET
;
955 case 0x0E: Precision(); break; // PRECISION
956 case 0x22: Rec1904(); break; // 1904 [ 2345 ]
957 case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
958 case 0x8D: Hideobj(); break; // HIDEOBJ [ 345 ]
959 case 0xD3: /*ReadBasic()*/bHasBasic
= true; break;
960 // case 0xD3: ReadBasic(); break;
961 case 0xDE: Olesize(); break;
962 case 0x01BA: Codename( TRUE
); break;
964 case EXC_ID_USESELFS
: ReadUsesElfs(); break;
966 case EXC_ID2_FONT
: rFontBfr
.ReadFont( maStrm
); break;
967 case EXC_ID4_FORMAT
: rNumFmtBfr
.ReadFormat( maStrm
); break;
968 case EXC_ID5_XF
: rXFBfr
.ReadXF( maStrm
); break;
969 case EXC_ID_STYLE
: rXFBfr
.ReadStyle( maStrm
); break;
971 case EXC_ID_SST
: rSst
.ReadSst( maStrm
); break;
972 case EXC_ID_TABID
: rTabInfo
.ReadTabid( maStrm
); break;
973 case EXC_ID_NAME
: rNameMgr
.ReadName( maStrm
); break;
975 case EXC_ID_EXTERNSHEET
: rLinkMgr
.ReadExternsheet( maStrm
); break;
976 case EXC_ID_SUPBOOK
: rLinkMgr
.ReadSupbook( maStrm
); break;
977 case EXC_ID_XCT
: rLinkMgr
.ReadXct( maStrm
); break;
978 case EXC_ID_CRN
: rLinkMgr
.ReadCrn( maStrm
); break;
979 case EXC_ID_EXTERNNAME
: rLinkMgr
.ReadExternname( maStrm
, pFormConv
); break;
981 case EXC_ID_MSODRAWINGGROUP
:rObjMgr
.ReadMsoDrawingGroup( maStrm
); break;
983 case EXC_ID_SXIDSTM
: rPTableMgr
.ReadSxidstm( maStrm
); break;
984 case EXC_ID_SXVS
: rPTableMgr
.ReadSxvs( maStrm
); break;
985 case EXC_ID_DCONREF
: rPTableMgr
.ReadDconref( maStrm
); break;
991 // ----------------------------------------------------------------
992 // before worksheet: wait for new worksheet BOF
993 case EXC_STATE_BEFORE_SHEET
:
995 if( nRecId
== EXC_ID5_BOF
)
997 // #94191# import only 256 sheets
998 if( GetCurrScTab() > GetScMaxPos().Tab() )
1000 XclTools::SkipSubStream( maStrm
);
1001 // #i29930# show warning box
1002 GetAddressConverter().CheckScTab( GetCurrScTab(), true );
1003 eAkt
= EXC_STATE_END
;
1009 switch( pExcRoot
->eDateiTyp
)
1011 case Biff8
: // worksheet
1012 case Biff8M4
: // macro sheet
1013 eAkt
= EXC_STATE_SHEET_PRE
; // Shrfmla Prefetch, Row-Prefetch
1014 aIn
.StoreGlobalPosition();
1016 case Biff8C
: // chart sheet
1017 rObjMgr
.ReadTabChart( maStrm
);
1019 GetTracer().TraceChartOnlySheet();
1021 case Biff8W
: // workbook
1022 DBG_ERRORFILE( "ImportExcel8::Read - double workbook globals" );
1024 case Biff8V
: // VB module
1026 // TODO: do not create a sheet in the Calc document
1027 pD
->SetVisible( GetCurrScTab(), FALSE
);
1028 XclTools::SkipSubStream( maStrm
);
1036 // ----------------------------------------------------------------
1037 // prefetch for worksheet
1038 case EXC_STATE_SHEET_PRE
:
1042 // skip chart substream
1046 case EXC_ID5_BOF
: XclTools::SkipSubStream( maStrm
); break;
1048 case EXC_ID_WINDOW2
: rTabViewSett
.ReadWindow2( maStrm
, false );break;
1049 case EXC_ID_SCL
: rTabViewSett
.ReadScl( maStrm
); break;
1050 case EXC_ID_PANE
: rTabViewSett
.ReadPane( maStrm
); break;
1051 case EXC_ID_SELECTION
: rTabViewSett
.ReadSelection( maStrm
); break;
1053 case EXC_ID2_DIMENSIONS
:
1054 case EXC_ID3_DIMENSIONS
: ReadDimensions(); break;
1056 case 0x0A: // EOF [ 2345 ]
1058 eAkt
= EXC_STATE_SHEET
;
1060 GetDoc().GetName( GetCurrScTab(), sName
);
1061 if ( !bSheetHasCodeName
)
1063 nTabsWithNoCodeName
.push_back( GetCurrScTab() );
1064 OSL_TRACE("No Codename for %d", GetCurrScTab() );
1069 GetDoc().GetCodeName( GetCurrScTab(), sCodeName
);
1070 OSL_TRACE("Have CodeName %s for SheetName %s",
1071 rtl::OUStringToOString( sCodeName
, RTL_TEXTENCODING_UTF8
).getStr(), rtl::OUStringToOString( sName
, RTL_TEXTENCODING_UTF8
).getStr() );
1072 CodeNames
.push_back( sCodeName
);
1075 bSheetHasCodeName
= false; // reset
1078 aIn
.SeekGlobalPosition(); // und zurueck an alte Position
1081 case 0x12: SheetProtect(); break;
1082 case 0x13: SheetPassword(); break;
1083 case 0x42: Codepage(); break; // CODEPAGE [ 2345 ]
1084 case 0x55: DefColWidth(); break;
1085 case 0x7D: Colinfo(); break; // COLINFO [ 345 ]
1086 case 0x81: Wsbool(); break; // WSBOOL [ 2345 ]
1087 case 0x8C: Country(); break; // COUNTRY [ 345 ]
1088 case 0x99: Standardwidth(); break; // STANDARDWIDTH[ 45 ]
1089 case 0x9B: FilterMode(); break; // FILTERMODE
1090 case 0x9D: AutoFilterInfo(); break;// AUTOFILTERINFO
1091 case 0x9E: AutoFilter(); break; // AUTOFILTER
1092 case 0x01BA: Codename( FALSE
); bSheetHasCodeName
= true; break;
1093 case 0x0208: Row34(); break; // ROW [ 34 ]
1095 case 0x0221: Array34(); break; // ARRAY [ 34 ]
1096 case 0x0225: Defrowheight345();break;//DEFAULTROWHEI[ 345 ]
1097 case 0x04BC: Shrfmla(); break; // SHRFMLA [ 5 ]
1098 case 0x0867: SheetProtection(); break; // SHEETPROTECTION
1103 // ----------------------------------------------------------------
1105 case EXC_STATE_SHEET
:
1109 // skip unknown substreams
1113 case EXC_ID5_BOF
: XclTools::SkipSubStream( maStrm
); break;
1115 case EXC_ID_EOF
: Eof(); eAkt
= EXC_STATE_BEFORE_SHEET
; break;
1118 case EXC_ID3_BLANK
: ReadBlank(); break;
1119 case EXC_ID2_INTEGER
: ReadInteger(); break;
1120 case EXC_ID2_NUMBER
:
1121 case EXC_ID3_NUMBER
: ReadNumber(); break;
1123 case EXC_ID3_LABEL
: ReadLabel(); break;
1124 case EXC_ID2_BOOLERR
:
1125 case EXC_ID3_BOOLERR
: ReadBoolErr(); break;
1126 case EXC_ID_RK
: ReadRk(); break;
1130 case 0x0406: Formula25(); break; // FORMULA [ 2 5 ]
1131 case 0x000C: Calccount(); break; // CALCCOUNT
1132 case 0x0010: Delta(); break; // DELTA
1133 case 0x0011: Iteration(); break; // ITERATION
1135 case 0x00AE: Scenman(); break; // SCENMAN
1136 case 0x00AF: Scenario(); break; // SCENARIO
1137 case 0x00BD: Mulrk(); break; // MULRK [ 5 ]
1138 case 0x00BE: Mulblank(); break; // MULBLANK [ 5 ]
1139 case 0x00D6: Rstring(); break; // RSTRING [ 5 ]
1140 case 0x00E5: Cellmerging(); break; // CELLMERGING
1141 case 0x00FD: Labelsst(); break; // LABELSST [ 8 ]
1142 case 0x0236: TableOp(); break; // TABLE
1144 case EXC_ID_HORPAGEBREAKS
:
1145 case EXC_ID_VERPAGEBREAKS
: rPageSett
.ReadPageBreaks( maStrm
); break;
1147 case EXC_ID_FOOTER
: rPageSett
.ReadHeaderFooter( maStrm
); break;
1148 case EXC_ID_LEFTMARGIN
:
1149 case EXC_ID_RIGHTMARGIN
:
1150 case EXC_ID_TOPMARGIN
:
1151 case EXC_ID_BOTTOMMARGIN
: rPageSett
.ReadMargin( maStrm
); break;
1152 case EXC_ID_PRINTHEADERS
: rPageSett
.ReadPrintHeaders( maStrm
); break;
1153 case EXC_ID_PRINTGRIDLINES
: rPageSett
.ReadPrintGridLines( maStrm
); break;
1154 case EXC_ID_HCENTER
:
1155 case EXC_ID_VCENTER
: rPageSett
.ReadCenter( maStrm
); break;
1156 case EXC_ID_SETUP
: rPageSett
.ReadSetup( maStrm
); break;
1157 case EXC_ID8_IMGDATA
: rPageSett
.ReadImgData( maStrm
); break;
1159 case EXC_ID_MSODRAWING
: rObjMgr
.ReadMsoDrawing( maStrm
); break;
1160 // #i61786# weird documents: OBJ without MSODRAWING -> read in BIFF5 format
1161 case EXC_ID_OBJ
: rObjMgr
.ReadObj( maStrm
); break;
1162 case EXC_ID_NOTE
: rObjMgr
.ReadNote( maStrm
); break;
1164 case EXC_ID_HLINK
: XclImpHyperlink::ReadHlink( maStrm
); break;
1165 case EXC_ID_LABELRANGES
: XclImpLabelranges::ReadLabelranges( maStrm
); break;
1167 case EXC_ID_CONDFMT
: rCondFmtMgr
.ReadCondfmt( maStrm
); break;
1168 case EXC_ID_CF
: rCondFmtMgr
.ReadCF( maStrm
); break;
1170 case EXC_ID_DVAL
: XclImpValidation::ReadDval( maStrm
); break;
1171 case EXC_ID_DV
: XclImpValidation::ReadDV( maStrm
); break;
1173 case EXC_ID_QSI
: rWQBfr
.ReadQsi( maStrm
); break;
1174 case EXC_ID_WQSTRING
: rWQBfr
.ReadWqstring( maStrm
); break;
1175 case EXC_ID_PQRY
: rWQBfr
.ReadParamqry( maStrm
); break;
1176 case EXC_ID_WQSETT
: rWQBfr
.ReadWqsettings( maStrm
); break;
1177 case EXC_ID_WQTABLES
: rWQBfr
.ReadWqtables( maStrm
); break;
1179 case EXC_ID_SXVIEW
: rPTableMgr
.ReadSxview( maStrm
); break;
1180 case EXC_ID_SXVD
: rPTableMgr
.ReadSxvd( maStrm
); break;
1181 case EXC_ID_SXVI
: rPTableMgr
.ReadSxvi( maStrm
); break;
1182 case EXC_ID_SXIVD
: rPTableMgr
.ReadSxivd( maStrm
); break;
1183 case EXC_ID_SXPI
: rPTableMgr
.ReadSxpi( maStrm
); break;
1184 case EXC_ID_SXDI
: rPTableMgr
.ReadSxdi( maStrm
); break;
1185 case EXC_ID_SXVDEX
: rPTableMgr
.ReadSxvdex( maStrm
); break;
1186 case EXC_ID_SXEX
: rPTableMgr
.ReadSxex( maStrm
); break;
1187 case EXC_ID_SXVIEWEX9
: rPTableMgr
.ReadSxViewEx9( maStrm
); break;
1189 // 0x0862 (SHEETEXT)
1190 case EXC_ID_SHEETEXT
: rTabViewSett
.ReadTabBgColor( maStrm
, rPal
); break;
1195 // ----------------------------------------------------------------
1200 if( eLastErr
== eERR_OK
)
1202 // In some strange circumstances a the codename might be missing
1203 // # Create any missing Sheet CodeNames
1204 std::vector
< SCTAB
>::iterator it_end
= nTabsWithNoCodeName
.end();
1205 for ( std::vector
< SCTAB
>::iterator it
= nTabsWithNoCodeName
.begin(); it
!= it_end
; ++it
)
1207 bool bGotCodeName
= false;
1209 OSL_TRACE("Trying to find suitable codename for %d", *it
);
1212 String
sTmpName( RTL_CONSTASCII_USTRINGPARAM("Sheet" ) );
1213 sTmpName
+= String::CreateFromInt32( sal_Int32(nTab
++) );
1214 std::vector
< String
>::iterator codeName_It
= CodeNames
.begin();
1215 std::vector
< String
>::iterator codeName_It_end
= CodeNames
.end();
1216 // search for codename
1217 for ( ; codeName_It
!= codeName_It_end
; ++codeName_It
)
1219 if ( *codeName_It
== sTmpName
)
1223 if ( codeName_It
== codeName_It_end
) // generated codename not found
1225 OSL_TRACE("Using generated codename %s", rtl::OUStringToOString( sTmpName
, RTL_TEXTENCODING_UTF8
).getStr() );
1227 GetDoc().SetCodeName( *it
, sTmpName
);
1228 // Record newly used codename
1229 CodeNames
.push_back( sTmpName
);
1230 // Record those we have created so they can be created in
1232 AutoGeneratedCodeNames
.push_back( sTmpName
);
1238 // #i45843# Convert pivot tables before calculation, so they are available
1239 // for the GETPIVOTDATA function.
1240 if( GetBiff() == EXC_BIFF8
)
1241 GetPivotTableManager().ConvertPivotTables();
1246 // Excel documents look much better without this call; better in the
1247 // sense that the row heights are identical to the original heights in
1253 pD
->CalcAfterLoad();
1255 // import change tracking data
1256 XclImpChangeTrack
aImpChTr( GetRoot(), maStrm
);
1259 const XclImpAddressConverter
& rAddrConv
= GetAddressConverter();
1260 if( rAddrConv
.IsTabTruncated() )
1261 eLastErr
= SCWARN_IMPORT_SHEET_OVERFLOW
;
1262 else if( bTabTruncated
|| rAddrConv
.IsRowTruncated() )
1263 eLastErr
= SCWARN_IMPORT_ROW_OVERFLOW
;
1264 else if( rAddrConv
.IsColTruncated() )
1265 eLastErr
= SCWARN_IMPORT_COLUMN_OVERFLOW
;
1267 if( GetBiff() == EXC_BIFF8
)
1268 GetPivotTableManager().MaybeRefreshPivotTables();
1274 //___________________________________________________________________