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