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