xref: /trunk/main/oox/inc/oox/xls/biffhelper.hxx (revision e3508121)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef OOX_XLS_BIFFHELPER_HXX
25 #define OOX_XLS_BIFFHELPER_HXX
26 
27 #include "oox/helper/binarystreambase.hxx"
28 
29 namespace oox { class SequenceInputStream; }
30 
31 namespace oox {
32 namespace xls {
33 
34 class BiffInputStream;
35 
36 // BIFF12 record identifiers ==================================================
37 
38 const sal_Int32 BIFF12_ID_ARRAY             = 0x01AA;
39 const sal_Int32 BIFF12_ID_AUTOFILTER        = 0x00A1;
40 const sal_Int32 BIFF12_ID_AUTOSORTSCOPE     = 0x01CB;
41 const sal_Int32 BIFF12_ID_BINARYINDEXBLOCK  = 0x002A;
42 const sal_Int32 BIFF12_ID_BINARYINDEXROWS   = 0x0028;
43 const sal_Int32 BIFF12_ID_BOOKVIEWS         = 0x0087;
44 const sal_Int32 BIFF12_ID_BORDER            = 0x002E;
45 const sal_Int32 BIFF12_ID_BORDERS           = 0x0265;
46 const sal_Int32 BIFF12_ID_BRK               = 0x018C;
47 const sal_Int32 BIFF12_ID_CALCPR            = 0x009D;
48 const sal_Int32 BIFF12_ID_CELL_BLANK        = 0x0001;
49 const sal_Int32 BIFF12_ID_CELL_BOOL         = 0x0004;
50 const sal_Int32 BIFF12_ID_CELL_DOUBLE       = 0x0005;
51 const sal_Int32 BIFF12_ID_CELL_ERROR        = 0x0003;
52 const sal_Int32 BIFF12_ID_CELL_RK           = 0x0002;
53 const sal_Int32 BIFF12_ID_CELL_RSTRING      = 0x003E;
54 const sal_Int32 BIFF12_ID_CELL_SI           = 0x0007;
55 const sal_Int32 BIFF12_ID_CELL_STRING       = 0x0006;
56 const sal_Int32 BIFF12_ID_CELLSTYLE         = 0x0030;
57 const sal_Int32 BIFF12_ID_CELLSTYLES        = 0x026B;
58 const sal_Int32 BIFF12_ID_CELLSTYLEXFS      = 0x0272;
59 const sal_Int32 BIFF12_ID_CELLXFS           = 0x0269;
60 const sal_Int32 BIFF12_ID_CFCOLOR           = 0x0234;
61 const sal_Int32 BIFF12_ID_CFRULE            = 0x01CF;
62 const sal_Int32 BIFF12_ID_CHARTPAGESETUP    = 0x028C;
63 const sal_Int32 BIFF12_ID_CHARTPROTECTION   = 0x029D;
64 const sal_Int32 BIFF12_ID_CHARTSHEETPR      = 0x028B;
65 const sal_Int32 BIFF12_ID_CHARTSHEETVIEW    = 0x008D;
66 const sal_Int32 BIFF12_ID_CHARTSHEETVIEWS   = 0x008B;
67 const sal_Int32 BIFF12_ID_COL               = 0x003C;
68 const sal_Int32 BIFF12_ID_COLBREAKS         = 0x018A;
69 const sal_Int32 BIFF12_ID_COLOR             = 0x023C;
70 const sal_Int32 BIFF12_ID_COLORS            = 0x01D9;
71 const sal_Int32 BIFF12_ID_COLORSCALE        = 0x01D5;
72 const sal_Int32 BIFF12_ID_COLS              = 0x0186;
73 const sal_Int32 BIFF12_ID_COMMENT           = 0x027B;
74 const sal_Int32 BIFF12_ID_COMMENTAUTHOR     = 0x0278;
75 const sal_Int32 BIFF12_ID_COMMENTAUTHORS    = 0x0276;
76 const sal_Int32 BIFF12_ID_COMMENTLIST       = 0x0279;
77 const sal_Int32 BIFF12_ID_COMMENTS          = 0x0274;
78 const sal_Int32 BIFF12_ID_COMMENTTEXT       = 0x027D;
79 const sal_Int32 BIFF12_ID_CONDFORMATTING    = 0x01CD;
80 const sal_Int32 BIFF12_ID_CONNECTION        = 0x00C9;
81 const sal_Int32 BIFF12_ID_CONNECTIONS       = 0x01AD;
82 const sal_Int32 BIFF12_ID_CONTROL           = 0x0284;
83 const sal_Int32 BIFF12_ID_CONTROLS          = 0x0283;
84 const sal_Int32 BIFF12_ID_CUSTOMCHARTVIEW   = 0x028F;
85 const sal_Int32 BIFF12_ID_CUSTOMCHARTVIEWS  = 0x028D;
86 const sal_Int32 BIFF12_ID_CUSTOMFILTER      = 0x00AE;
87 const sal_Int32 BIFF12_ID_CUSTOMFILTERS     = 0x00AC;
88 const sal_Int32 BIFF12_ID_CUSTOMSHEETVIEW   = 0x01A7;
89 const sal_Int32 BIFF12_ID_CUSTOMSHEETVIEWS  = 0x01A6;
90 const sal_Int32 BIFF12_ID_CUSTOMWORKBOOKVIEW= 0x018D;
91 const sal_Int32 BIFF12_ID_DATABAR           = 0x01D3;
92 const sal_Int32 BIFF12_ID_DATATABLE         = 0x01AC;
93 const sal_Int32 BIFF12_ID_DATAVALIDATION    = 0x0040;
94 const sal_Int32 BIFF12_ID_DATAVALIDATIONS   = 0x023D;
95 const sal_Int32 BIFF12_ID_DDEITEMVALUES     = 0x0242;
96 const sal_Int32 BIFF12_ID_DDEITEM_BOOL      = 0x0248;
97 const sal_Int32 BIFF12_ID_DDEITEM_DOUBLE    = 0x0244;
98 const sal_Int32 BIFF12_ID_DDEITEM_ERROR     = 0x0245;
99 const sal_Int32 BIFF12_ID_DDEITEM_STRING    = 0x0246;
100 const sal_Int32 BIFF12_ID_DEFINEDNAME       = 0x0027;
101 const sal_Int32 BIFF12_ID_DIMENSION         = 0x0094;
102 const sal_Int32 BIFF12_ID_DISCRETEFILTER    = 0x00A7;
103 const sal_Int32 BIFF12_ID_DISCRETEFILTERS   = 0x00A5;
104 const sal_Int32 BIFF12_ID_DRAWING           = 0x0226;
105 const sal_Int32 BIFF12_ID_DXF               = 0x01FB;
106 const sal_Int32 BIFF12_ID_DXFS              = 0x01F9;
107 const sal_Int32 BIFF12_ID_EXTCELL_BLANK     = 0x016F;
108 const sal_Int32 BIFF12_ID_EXTCELL_BOOL      = 0x0171;
109 const sal_Int32 BIFF12_ID_EXTCELL_DOUBLE    = 0x0170;
110 const sal_Int32 BIFF12_ID_EXTCELL_ERROR     = 0x0172;
111 const sal_Int32 BIFF12_ID_EXTCELL_STRING    = 0x0173;
112 const sal_Int32 BIFF12_ID_EXTERNALADDIN     = 0x029B;
113 const sal_Int32 BIFF12_ID_EXTERNALBOOK      = 0x0168;
114 const sal_Int32 BIFF12_ID_EXTERNALNAME      = 0x0241;
115 const sal_Int32 BIFF12_ID_EXTERNALREF       = 0x0163;
116 const sal_Int32 BIFF12_ID_EXTERNALREFS      = 0x0161;
117 const sal_Int32 BIFF12_ID_EXTERNALSELF      = 0x0165;
118 const sal_Int32 BIFF12_ID_EXTERNALSAME      = 0x0166;
119 const sal_Int32 BIFF12_ID_EXTERNALSHEETS    = 0x016A;
120 const sal_Int32 BIFF12_ID_EXTROW            = 0x016E;
121 const sal_Int32 BIFF12_ID_EXTSHEETDATA      = 0x016B;
122 const sal_Int32 BIFF12_ID_EXTERNALNAMEFLAGS = 0x024A;
123 const sal_Int32 BIFF12_ID_EXTSHEETNAMES     = 0x0167;
124 const sal_Int32 BIFF12_ID_FILESHARING       = 0x0224;
125 const sal_Int32 BIFF12_ID_FILEVERSION       = 0x0080;
126 const sal_Int32 BIFF12_ID_FILL              = 0x002D;
127 const sal_Int32 BIFF12_ID_FILLS             = 0x025B;
128 const sal_Int32 BIFF12_ID_FILTERCOLUMN      = 0x00A3;
129 const sal_Int32 BIFF12_ID_FONT              = 0x002B;
130 const sal_Int32 BIFF12_ID_FONTS             = 0x0263;
131 const sal_Int32 BIFF12_ID_FORMULA_STRING    = 0x0008;
132 const sal_Int32 BIFF12_ID_FORMULA_DOUBLE    = 0x0009;
133 const sal_Int32 BIFF12_ID_FORMULA_BOOL      = 0x000A;
134 const sal_Int32 BIFF12_ID_FORMULA_ERROR     = 0x000B;
135 const sal_Int32 BIFF12_ID_FUNCTIONGROUP     = 0x0299;
136 const sal_Int32 BIFF12_ID_FUNCTIONGROUPS    = 0x0298;
137 const sal_Int32 BIFF12_ID_HEADERFOOTER      = 0x01DF;
138 const sal_Int32 BIFF12_ID_HYPERLINK         = 0x01EE;
139 const sal_Int32 BIFF12_ID_ICONSET           = 0x01D1;
140 const sal_Int32 BIFF12_ID_INDEXEDCOLORS     = 0x0235;
141 const sal_Int32 BIFF12_ID_INPUTCELLS        = 0x01F8;
142 const sal_Int32 BIFF12_ID_LEGACYDRAWING     = 0x0227;
143 const sal_Int32 BIFF12_ID_MERGECELL         = 0x00B0;
144 const sal_Int32 BIFF12_ID_MERGECELLS        = 0x00B1;
145 const sal_Int32 BIFF12_ID_MRUCOLORS         = 0x0239;
146 const sal_Int32 BIFF12_ID_MULTCELL_BLANK    = 0x000C;
147 const sal_Int32 BIFF12_ID_MULTCELL_BOOL     = 0x000F;
148 const sal_Int32 BIFF12_ID_MULTCELL_DOUBLE   = 0x0010;
149 const sal_Int32 BIFF12_ID_MULTCELL_ERROR    = 0x000E;
150 const sal_Int32 BIFF12_ID_MULTCELL_RK       = 0x000D;
151 const sal_Int32 BIFF12_ID_MULTCELL_RSTRING  = 0x003D;
152 const sal_Int32 BIFF12_ID_MULTCELL_SI       = 0x0012;
153 const sal_Int32 BIFF12_ID_MULTCELL_STRING   = 0x0011;
154 const sal_Int32 BIFF12_ID_NUMFMT            = 0x002C;
155 const sal_Int32 BIFF12_ID_NUMFMTS           = 0x0267;
156 const sal_Int32 BIFF12_ID_OLEOBJECT         = 0x027F;
157 const sal_Int32 BIFF12_ID_OLEOBJECTS        = 0x027E;
158 const sal_Int32 BIFF12_ID_OLESIZE           = 0x0225;
159 const sal_Int32 BIFF12_ID_PAGEMARGINS       = 0x01DC;
160 const sal_Int32 BIFF12_ID_PAGESETUP         = 0x01DE;
161 const sal_Int32 BIFF12_ID_PANE              = 0x0097;
162 const sal_Int32 BIFF12_ID_PCDEFINITION      = 0x00B3;
163 const sal_Int32 BIFF12_ID_PCDFDISCRETEPR    = 0x00E1;
164 const sal_Int32 BIFF12_ID_PCDFGROUPITEMS    = 0x00DD;
165 const sal_Int32 BIFF12_ID_PCDFIELD          = 0x00B7;
166 const sal_Int32 BIFF12_ID_PCDFIELDGROUP     = 0x00DB;
167 const sal_Int32 BIFF12_ID_PCDFIELDS         = 0x00B5;
168 const sal_Int32 BIFF12_ID_PCDFRANGEPR       = 0x00DF;
169 const sal_Int32 BIFF12_ID_PCDFSHAREDITEMS   = 0x00BD;
170 const sal_Int32 BIFF12_ID_PCDSHEETSOURCE    = 0x00BB;
171 const sal_Int32 BIFF12_ID_PCDSOURCE         = 0x00B9;
172 const sal_Int32 BIFF12_ID_PCITEM_ARRAY      = 0x00BF;
173 const sal_Int32 BIFF12_ID_PCITEM_BOOL       = 0x0016;
174 const sal_Int32 BIFF12_ID_PCITEM_DATE       = 0x0019;
175 const sal_Int32 BIFF12_ID_PCITEM_DOUBLE     = 0x0015;
176 const sal_Int32 BIFF12_ID_PCITEM_ERROR      = 0x0017;
177 const sal_Int32 BIFF12_ID_PCITEM_INDEX      = 0x001A;
178 const sal_Int32 BIFF12_ID_PCITEM_MISSING    = 0x0014;
179 const sal_Int32 BIFF12_ID_PCITEM_STRING     = 0x0018;
180 const sal_Int32 BIFF12_ID_PCITEMA_BOOL      = 0x001D;
181 const sal_Int32 BIFF12_ID_PCITEMA_DATE      = 0x0020;
182 const sal_Int32 BIFF12_ID_PCITEMA_DOUBLE    = 0x001C;
183 const sal_Int32 BIFF12_ID_PCITEMA_ERROR     = 0x001E;
184 const sal_Int32 BIFF12_ID_PCITEMA_MISSING   = 0x001B;
185 const sal_Int32 BIFF12_ID_PCITEMA_STRING    = 0x001F;
186 const sal_Int32 BIFF12_ID_PCRECORD          = 0x0021;
187 const sal_Int32 BIFF12_ID_PCRECORDDT        = 0x0022;
188 const sal_Int32 BIFF12_ID_PCRECORDS         = 0x00C1;
189 const sal_Int32 BIFF12_ID_PHONETICPR        = 0x0219;
190 const sal_Int32 BIFF12_ID_PICTURE           = 0x0232;
191 const sal_Int32 BIFF12_ID_PIVOTAREA         = 0x00F7;
192 const sal_Int32 BIFF12_ID_PIVOTCACHE        = 0x0182;
193 const sal_Int32 BIFF12_ID_PIVOTCACHES       = 0x0180;
194 const sal_Int32 BIFF12_ID_PRINTOPTIONS      = 0x01DD;
195 const sal_Int32 BIFF12_ID_PTCOLFIELDS       = 0x0137;
196 const sal_Int32 BIFF12_ID_PTDATAFIELD       = 0x0125;
197 const sal_Int32 BIFF12_ID_PTDATAFIELDS      = 0x0127;
198 const sal_Int32 BIFF12_ID_PTDEFINITION      = 0x0118;
199 const sal_Int32 BIFF12_ID_PTFIELD           = 0x011D;
200 const sal_Int32 BIFF12_ID_PTFIELDS          = 0x011F;
201 const sal_Int32 BIFF12_ID_PTFILTER          = 0x0259;
202 const sal_Int32 BIFF12_ID_PTFILTERS         = 0x0257;
203 const sal_Int32 BIFF12_ID_PTFITEM           = 0x011A;
204 const sal_Int32 BIFF12_ID_PTFITEMS          = 0x011B;
205 const sal_Int32 BIFF12_ID_PTLOCATION        = 0x013A;
206 const sal_Int32 BIFF12_ID_PTPAGEFIELD       = 0x0121;
207 const sal_Int32 BIFF12_ID_PTPAGEFIELDS      = 0x0123;
208 const sal_Int32 BIFF12_ID_PTREFERENCE       = 0x00FB;
209 const sal_Int32 BIFF12_ID_PTREFERENCEITEM   = 0x017E;
210 const sal_Int32 BIFF12_ID_PTREFERENCES      = 0x00F9;
211 const sal_Int32 BIFF12_ID_PTROWFIELDS       = 0x0135;
212 const sal_Int32 BIFF12_ID_QUERYTABLE        = 0x01BF;
213 const sal_Int32 BIFF12_ID_QUERYTABLEREFRESH = 0x01C1;
214 const sal_Int32 BIFF12_ID_RGBCOLOR          = 0x01DB;
215 const sal_Int32 BIFF12_ID_ROW               = 0x0000;
216 const sal_Int32 BIFF12_ID_ROWBREAKS         = 0x0188;
217 const sal_Int32 BIFF12_ID_SCENARIO          = 0x01F6;
218 const sal_Int32 BIFF12_ID_SCENARIOS         = 0x01F4;
219 const sal_Int32 BIFF12_ID_SELECTION         = 0x0098;
220 const sal_Int32 BIFF12_ID_SHAREDFMLA        = 0x01AB;
221 const sal_Int32 BIFF12_ID_SHEET             = 0x009C;
222 const sal_Int32 BIFF12_ID_SHEETDATA         = 0x0091;
223 const sal_Int32 BIFF12_ID_SHEETFORMATPR     = 0x01E5;
224 const sal_Int32 BIFF12_ID_SHEETPR           = 0x0093;
225 const sal_Int32 BIFF12_ID_SHEETPROTECTION   = 0x0217;
226 const sal_Int32 BIFF12_ID_SHEETS            = 0x008F;
227 const sal_Int32 BIFF12_ID_SHEETVIEW         = 0x0089;
228 const sal_Int32 BIFF12_ID_SHEETVIEWS        = 0x0085;
229 const sal_Int32 BIFF12_ID_SI                = 0x0013;
230 const sal_Int32 BIFF12_ID_SST               = 0x009F;
231 const sal_Int32 BIFF12_ID_STYLESHEET        = 0x0116;
232 const sal_Int32 BIFF12_ID_TABLE             = 0x0157;
233 const sal_Int32 BIFF12_ID_TABLEPART         = 0x0295;
234 const sal_Int32 BIFF12_ID_TABLEPARTS        = 0x0294;
235 const sal_Int32 BIFF12_ID_TABLESTYLEINFO    = 0x0201;
236 const sal_Int32 BIFF12_ID_TABLESTYLES       = 0x01FC;
237 const sal_Int32 BIFF12_ID_TOP10FILTER       = 0x00AA;
238 const sal_Int32 BIFF12_ID_VOLTYPE           = 0x0204;
239 const sal_Int32 BIFF12_ID_VOLTYPEMAIN       = 0x0206;
240 const sal_Int32 BIFF12_ID_VOLTYPES          = 0x0202;
241 const sal_Int32 BIFF12_ID_VOLTYPESTP        = 0x020A;
242 const sal_Int32 BIFF12_ID_VOLTYPETR         = 0x020B;
243 const sal_Int32 BIFF12_ID_WEBPR             = 0x0105;
244 const sal_Int32 BIFF12_ID_WEBPRTABLES       = 0x0107;
245 const sal_Int32 BIFF12_ID_WORKBOOK          = 0x0083;
246 const sal_Int32 BIFF12_ID_WORKBOOKPR        = 0x0099;
247 const sal_Int32 BIFF12_ID_WORKBOOKVIEW      = 0x009E;
248 const sal_Int32 BIFF12_ID_WORKSHEET         = 0x0081;
249 const sal_Int32 BIFF12_ID_XF                = 0x002F;
250 
251 // BIFF2-BIFF8 record identifiers =============================================
252 
253 /** An enumeration for all binary Excel file format types (BIFF types). */
254 enum BiffType
255 {
256     BIFF2 = 0,                  /// MS Excel 2.1.
257     BIFF3,                      /// MS Excel 3.0.
258     BIFF4,                      /// MS Excel 4.0.
259     BIFF5,                      /// MS Excel 5.0, MS Excel 7.0 (95).
260     BIFF8,                      /// MS Excel 8.0 (97), 9.0 (2000), 10.0 (XP), 11.0 (2003).
261     BIFF_UNKNOWN                /// Unknown BIFF version.
262 };
263 
264 const sal_uInt16 BIFF2_MAXRECSIZE           = 2080;
265 const sal_uInt16 BIFF8_MAXRECSIZE           = 8224;
266 
267 // record identifiers ---------------------------------------------------------
268 
269 const sal_uInt16 BIFF2_ID_ARRAY             = 0x0021;
270 const sal_uInt16 BIFF3_ID_ARRAY             = 0x0221;
271 const sal_uInt16 BIFF_ID_AUTOFILTER         = 0x009D;
272 const sal_uInt16 BIFF2_ID_BLANK             = 0x0001;
273 const sal_uInt16 BIFF3_ID_BLANK             = 0x0201;
274 const sal_uInt16 BIFF2_ID_BOF               = 0x0009;
275 const sal_uInt16 BIFF3_ID_BOF               = 0x0209;
276 const sal_uInt16 BIFF4_ID_BOF               = 0x0409;
277 const sal_uInt16 BIFF5_ID_BOF               = 0x0809;
278 const sal_uInt16 BIFF_ID_BOOKBOOL           = 0x00DA;
279 const sal_uInt16 BIFF_ID_BOOKEXT            = 0x0863;
280 const sal_uInt16 BIFF2_ID_BOOLERR           = 0x0005;
281 const sal_uInt16 BIFF3_ID_BOOLERR           = 0x0205;
282 const sal_uInt16 BIFF_ID_BOTTOMMARGIN       = 0x0029;
283 const sal_uInt16 BIFF_ID_CALCCOUNT          = 0x000C;
284 const sal_uInt16 BIFF_ID_CALCMODE           = 0x000D;
285 const sal_uInt16 BIFF_ID_CFHEADER           = 0x01B0;
286 const sal_uInt16 BIFF_ID_CFRULE             = 0x01B1;
287 const sal_uInt16 BIFF_ID_CFRULE12           = 0x087A;
288 const sal_uInt16 BIFF_ID_CFRULEEXT          = 0x087B;
289 const sal_uInt16 BIFF_ID_CH3DDATAFORMAT     = 0x105F;
290 const sal_uInt16 BIFF_ID_CHAREA             = 0x101A;
291 const sal_uInt16 BIFF_ID_CHAREAFORMAT       = 0x100A;
292 const sal_uInt16 BIFF_ID_CHATTACHEDLABEL    = 0x100C;
293 const sal_uInt16 BIFF_ID_CHAXESSET          = 0x1041;
294 const sal_uInt16 BIFF_ID_CHAXIS             = 0x101D;
295 const sal_uInt16 BIFF_ID_CHAXISLINE         = 0x1021;
296 const sal_uInt16 BIFF_ID_CHBAR              = 0x1017;
297 const sal_uInt16 BIFF_ID_CHBEGIN            = 0x1033;
298 const sal_uInt16 BIFF_ID_CHCHART            = 0x1002;
299 const sal_uInt16 BIFF_ID_CHCHART3D          = 0x103A;
300 const sal_uInt16 BIFF_ID_CHCHARTLINE        = 0x101C;
301 const sal_uInt16 BIFF_ID_CHDATAFORMAT       = 0x1006;
302 const sal_uInt16 BIFF_ID_CHDATERANGE        = 0x1062;
303 const sal_uInt16 BIFF_ID_CHDEFAULTTEXT      = 0x1024;
304 const sal_uInt16 BIFF_ID_CHDROPBAR          = 0x103D;
305 const sal_uInt16 BIFF_ID_CHECKCOMPAT        = 0x088C;
306 const sal_uInt16 BIFF_ID_CHEND              = 0x1034;
307 const sal_uInt16 BIFF_ID_CHESCHERFORMAT     = 0x1066;
308 const sal_uInt16 BIFF_ID_CHFONT             = 0x1026;
309 const sal_uInt16 BIFF_ID_CHFORMAT           = 0x104E;
310 const sal_uInt16 BIFF_ID_CHFORMATRUNS       = 0x1050;
311 const sal_uInt16 BIFF_ID_CHFRAME            = 0x1032;
312 const sal_uInt16 BIFF_ID_CHFRAMEPOS         = 0x104F;
313 const sal_uInt16 BIFF_ID_CHFRBLOCKBEGIN     = 0x0852;
314 const sal_uInt16 BIFF_ID_CHFRBLOCKEND       = 0x0853;
315 const sal_uInt16 BIFF_ID_CHFRCATEGORYPROPS  = 0x0856;
316 const sal_uInt16 BIFF_ID_CHFREXTPROPS       = 0x089E;
317 const sal_uInt16 BIFF_ID_CHFREXTPROPSCONT   = 0x089F;
318 const sal_uInt16 BIFF_ID_CHFRINFO           = 0x0850;
319 const sal_uInt16 BIFF_ID_CHFRLABELPROPS     = 0x086B;
320 const sal_uInt16 BIFF_ID_CHFRLAYOUT         = 0x089D;
321 const sal_uInt16 BIFF_ID_CHFRPLOTAREALAYOUT = 0x08A7;
322 const sal_uInt16 BIFF_ID_CHFRSHAPEPROPS     = 0x08A4;
323 const sal_uInt16 BIFF_ID_CHFRTEXTPROPS      = 0x08A5;
324 const sal_uInt16 BIFF_ID_CHFRUNITPROPS      = 0x0857;
325 const sal_uInt16 BIFF_ID_CHFRWRAPPER        = 0x0851;
326 const sal_uInt16 BIFF_ID_CHLABELRANGE       = 0x1020;
327 const sal_uInt16 BIFF_ID_CHLEGEND           = 0x1015;
328 const sal_uInt16 BIFF_ID_CHLINE             = 0x1018;
329 const sal_uInt16 BIFF_ID_CHLINEFORMAT       = 0x1007;
330 const sal_uInt16 BIFF_ID_CHMARKERFORMAT     = 0x1009;
331 const sal_uInt16 BIFF_ID_CHOBJECTLINK       = 0x1027;
332 const sal_uInt16 BIFF_ID_CHPICFORMAT        = 0x103C;
333 const sal_uInt16 BIFF_ID_CHPIE              = 0x1019;
334 const sal_uInt16 BIFF_ID_CHPIEEXT           = 0x1061;
335 const sal_uInt16 BIFF_ID_CHPIEFORMAT        = 0x100B;
336 const sal_uInt16 BIFF_ID_CHPIVOTFLAGS       = 0x0859;
337 const sal_uInt16 BIFF5_ID_CHPIVOTREF        = 0x1048;
338 const sal_uInt16 BIFF8_ID_CHPIVOTREF        = 0x0858;
339 const sal_uInt16 BIFF_ID_CHPLOTFRAME        = 0x1035;
340 const sal_uInt16 BIFF_ID_CHPLOTGROWTH       = 0x1064;
341 const sal_uInt16 BIFF_ID_CHPROPERTIES       = 0x1044;
342 const sal_uInt16 BIFF_ID_CHRADARLINE        = 0x103E;
343 const sal_uInt16 BIFF_ID_CHRADARAREA        = 0x1040;
344 const sal_uInt16 BIFF_ID_CHSCATTER          = 0x101B;
345 const sal_uInt16 BIFF_ID_CHSERERRORBAR      = 0x105B;
346 const sal_uInt16 BIFF_ID_CHSERGROUP         = 0x1045;
347 const sal_uInt16 BIFF_ID_CHSERIES           = 0x1003;
348 const sal_uInt16 BIFF_ID_CHSERIESFORMAT     = 0x105D;
349 const sal_uInt16 BIFF_ID_CHSERPARENT        = 0x104A;
350 const sal_uInt16 BIFF_ID_CHSERTRENDLINE     = 0x104B;
351 const sal_uInt16 BIFF_ID_CHSOURCELINK       = 0x1051;
352 const sal_uInt16 BIFF_ID_CHSTRING           = 0x100D;
353 const sal_uInt16 BIFF_ID_CHSURFACE          = 0x103F;
354 const sal_uInt16 BIFF_ID_CHTEXT             = 0x1025;
355 const sal_uInt16 BIFF_ID_CHTICK             = 0x101E;
356 const sal_uInt16 BIFF_ID_CHTYPEGROUP        = 0x1014;
357 const sal_uInt16 BIFF_ID_CHVALUERANGE       = 0x101F;
358 const sal_uInt16 BIFF_ID_CODENAME           = 0x01BA;
359 const sal_uInt16 BIFF_ID_CODEPAGE           = 0x0042;
360 const sal_uInt16 BIFF_ID_COLINFO            = 0x007D;
361 const sal_uInt16 BIFF_ID_COLUMNDEFAULT      = 0x0020;
362 const sal_uInt16 BIFF_ID_COLWIDTH           = 0x0024;
363 const sal_uInt16 BIFF_ID_COMPRESSPICS       = 0x089B;
364 const sal_uInt16 BIFF_ID_CONNECTION         = 0x0876;
365 const sal_uInt16 BIFF_ID_CONT               = 0x003C;
366 const sal_uInt16 BIFF_ID_COORDLIST          = 0x00A9;
367 const sal_uInt16 BIFF_ID_COUNTRY            = 0x008C;
368 const sal_uInt16 BIFF_ID_CRN                = 0x005A;
369 const sal_uInt16 BIFF2_ID_DATATABLE         = 0x0036;
370 const sal_uInt16 BIFF3_ID_DATATABLE         = 0x0236;
371 const sal_uInt16 BIFF2_ID_DATATABLE2        = 0x0037;
372 const sal_uInt16 BIFF_ID_DATAVALIDATION     = 0x01BE;
373 const sal_uInt16 BIFF_ID_DATAVALIDATIONS    = 0x01B2;
374 const sal_uInt16 BIFF_ID_DATEMODE           = 0x0022;
375 const sal_uInt16 BIFF_ID_DBCELL             = 0x00D7;
376 const sal_uInt16 BIFF_ID_DBQUERY            = 0x00DC;
377 const sal_uInt16 BIFF_ID_DCONBINAME         = 0x01B5;
378 const sal_uInt16 BIFF_ID_DCONNAME           = 0x0052;
379 const sal_uInt16 BIFF_ID_DCONREF            = 0x0051;
380 const sal_uInt16 BIFF_ID_DEFCOLWIDTH        = 0x0055;
381 const sal_uInt16 BIFF2_ID_DEFINEDNAME       = 0x0018;
382 const sal_uInt16 BIFF3_ID_DEFINEDNAME       = 0x0218;
383 const sal_uInt16 BIFF5_ID_DEFINEDNAME       = 0x0018;
384 const sal_uInt16 BIFF2_ID_DEFROWHEIGHT      = 0x0025;
385 const sal_uInt16 BIFF3_ID_DEFROWHEIGHT      = 0x0225;
386 const sal_uInt16 BIFF_ID_DELTA              = 0x0010;
387 const sal_uInt16 BIFF2_ID_DIMENSION         = 0x0000;
388 const sal_uInt16 BIFF3_ID_DIMENSION         = 0x0200;
389 const sal_uInt16 BIFF_ID_DXF                = 0x088D;
390 const sal_uInt16 BIFF_ID_EOF                = 0x000A;
391 const sal_uInt16 BIFF_ID_EXTERNALBOOK       = 0x01AE;
392 const sal_uInt16 BIFF2_ID_EXTERNALNAME      = 0x0023;
393 const sal_uInt16 BIFF3_ID_EXTERNALNAME      = 0x0223;
394 const sal_uInt16 BIFF5_ID_EXTERNALNAME      = 0x0023;
395 const sal_uInt16 BIFF_ID_EXTERNSHEET        = 0x0017;
396 const sal_uInt16 BIFF_ID_EXTSST             = 0x00FF;
397 const sal_uInt16 BIFF_ID_FILEPASS           = 0x002F;
398 const sal_uInt16 BIFF_ID_FILESHARING        = 0x005B;
399 const sal_uInt16 BIFF_ID_FILTERCOLUMN       = 0x009E;
400 const sal_uInt16 BIFF_ID_FILTERMODE         = 0x009B;
401 const sal_uInt16 BIFF2_ID_FONT              = 0x0031;
402 const sal_uInt16 BIFF3_ID_FONT              = 0x0231;
403 const sal_uInt16 BIFF5_ID_FONT              = 0x0031;
404 const sal_uInt16 BIFF_ID_FONTCOLOR          = 0x0045;
405 const sal_uInt16 BIFF_ID_FOOTER             = 0x0015;
406 const sal_uInt16 BIFF_ID_FORCEFULLCALC      = 0x08A3;
407 const sal_uInt16 BIFF2_ID_FORMAT            = 0x001E;
408 const sal_uInt16 BIFF4_ID_FORMAT            = 0x041E;
409 const sal_uInt16 BIFF2_ID_FORMULA           = 0x0006;
410 const sal_uInt16 BIFF3_ID_FORMULA           = 0x0206;
411 const sal_uInt16 BIFF4_ID_FORMULA           = 0x0406;
412 const sal_uInt16 BIFF5_ID_FORMULA           = 0x0006;
413 const sal_uInt16 BIFF_ID_GUTS               = 0x0080;
414 const sal_uInt16 BIFF_ID_HCENTER            = 0x0083;
415 const sal_uInt16 BIFF_ID_HEADER             = 0x0014;
416 const sal_uInt16 BIFF_ID_HEADERFOOTER       = 0x089C;
417 const sal_uInt16 BIFF_ID_HIDEOBJ            = 0x008D;
418 const sal_uInt16 BIFF_ID_HORPAGEBREAKS      = 0x001B;
419 const sal_uInt16 BIFF_ID_HYPERLINK          = 0x01B8;
420 const sal_uInt16 BIFF3_ID_IMGDATA           = 0x007F;
421 const sal_uInt16 BIFF8_ID_IMGDATA           = 0x00E9;
422 const sal_uInt16 BIFF2_ID_INDEX             = 0x000B;
423 const sal_uInt16 BIFF3_ID_INDEX             = 0x020B;
424 const sal_uInt16 BIFF2_ID_INTEGER           = 0x0002;
425 const sal_uInt16 BIFF_ID_INTERFACEHDR       = 0x00E1;
426 const sal_uInt16 BIFF_ID_ITERATION          = 0x0011;
427 const sal_uInt16 BIFF_ID_IXFE               = 0x0044;
428 const sal_uInt16 BIFF2_ID_LABEL             = 0x0004;
429 const sal_uInt16 BIFF3_ID_LABEL             = 0x0204;
430 const sal_uInt16 BIFF_ID_LABELRANGES        = 0x015F;
431 const sal_uInt16 BIFF_ID_LABELSST           = 0x00FD;
432 const sal_uInt16 BIFF_ID_LEFTMARGIN         = 0x0026;
433 const sal_uInt16 BIFF_ID_MERGEDCELLS        = 0x00E5;
434 const sal_uInt16 BIFF_ID_MSODRAWING         = 0x00EC;
435 const sal_uInt16 BIFF_ID_MSODRAWINGGROUP    = 0x00EB;
436 const sal_uInt16 BIFF_ID_MSODRAWINGSEL      = 0x00ED;
437 const sal_uInt16 BIFF_ID_MTHREADSETTINGS    = 0x089A;
438 const sal_uInt16 BIFF_ID_MULTBLANK          = 0x00BE;
439 const sal_uInt16 BIFF_ID_MULTRK             = 0x00BD;
440 const sal_uInt16 BIFF_ID_NOTE               = 0x001C;
441 const sal_uInt16 BIFF_ID_NOTESOUND          = 0x0096;
442 const sal_uInt16 BIFF2_ID_NUMBER            = 0x0003;
443 const sal_uInt16 BIFF3_ID_NUMBER            = 0x0203;
444 const sal_uInt16 BIFF_ID_OBJ                = 0x005D;
445 const sal_uInt16 BIFF_ID_OBJECTPROTECT      = 0x0063;
446 const sal_uInt16 BIFF_ID_OLESIZE            = 0x00DE;
447 const sal_uInt16 BIFF_ID_PAGELAYOUTVIEW     = 0x088B;
448 const sal_uInt16 BIFF_ID_PAGESETUP          = 0x00A1;
449 const sal_uInt16 BIFF_ID_PALETTE            = 0x0092;
450 const sal_uInt16 BIFF_ID_PANE               = 0x0041;
451 const sal_uInt16 BIFF_ID_PARAMQUERY         = 0x00DC;
452 const sal_uInt16 BIFF_ID_PASSWORD           = 0x0013;
453 const sal_uInt16 BIFF_ID_PCDEFINITION       = 0x00C6;
454 const sal_uInt16 BIFF_ID_PCDEFINITION2      = 0x0122;
455 const sal_uInt16 BIFF_ID_PCDFDISCRETEPR     = 0x00D9;
456 const sal_uInt16 BIFF_ID_PCDFIELD           = 0x00C7;
457 const sal_uInt16 BIFF_ID_PCDFIELDINDEX      = 0x0103;
458 const sal_uInt16 BIFF_ID_PCDFORMULAFIELD    = 0x00F9;
459 const sal_uInt16 BIFF_ID_PCDFRANGEPR        = 0x00D8;
460 const sal_uInt16 BIFF_ID_PCDFSQLTYPE        = 0x01BB;
461 const sal_uInt16 BIFF_ID_PCDSOURCE          = 0x00E3;
462 const sal_uInt16 BIFF_ID_PCITEM_BOOL        = 0x00CA;
463 const sal_uInt16 BIFF_ID_PCITEM_DATE        = 0x00CE;
464 const sal_uInt16 BIFF_ID_PCITEM_DOUBLE      = 0x00C9;
465 const sal_uInt16 BIFF_ID_PCITEM_ERROR       = 0x00CB;
466 const sal_uInt16 BIFF_ID_PCITEM_INDEXLIST   = 0x00C8;
467 const sal_uInt16 BIFF_ID_PCITEM_INTEGER     = 0x00CC;
468 const sal_uInt16 BIFF_ID_PCITEM_MISSING     = 0x00CF;
469 const sal_uInt16 BIFF_ID_PCITEM_STRING      = 0x00CD;
470 const sal_uInt16 BIFF_ID_PHONETICPR         = 0x00EF;
471 const sal_uInt16 BIFF_ID_PICTURE            = 0x00E9;
472 const sal_uInt16 BIFF_ID_PIVOTCACHE         = 0x00D5;
473 const sal_uInt16 BIFF_ID_PRECISION          = 0x000E;
474 const sal_uInt16 BIFF_ID_PRINTGRIDLINES     = 0x002B;
475 const sal_uInt16 BIFF_ID_PRINTHEADERS       = 0x002A;
476 const sal_uInt16 BIFF_ID_PROJEXTSHEET       = 0x00A3;
477 const sal_uInt16 BIFF_ID_PROTECT            = 0x0012;
478 const sal_uInt16 BIFF_ID_PTDATAFIELD        = 0x00C5;
479 const sal_uInt16 BIFF_ID_PTDEFINITION       = 0x00B0;
480 const sal_uInt16 BIFF_ID_PTDEFINITION2      = 0x00F1;
481 const sal_uInt16 BIFF_ID_PTFIELD            = 0x00B1;
482 const sal_uInt16 BIFF_ID_PTFIELD2           = 0x0100;
483 const sal_uInt16 BIFF_ID_PTFITEM            = 0x00B2;
484 const sal_uInt16 BIFF_ID_PTPAGEFIELDS       = 0x00B6;
485 const sal_uInt16 BIFF_ID_PTROWCOLFIELDS     = 0x00B4;
486 const sal_uInt16 BIFF_ID_PTROWCOLITEMS      = 0x00B5;
487 const sal_uInt16 BIFF_ID_QUERYTABLE         = 0x01AD;
488 const sal_uInt16 BIFF_ID_QUERYTABLEREFRESH  = 0x0802;
489 const sal_uInt16 BIFF_ID_QUERYTABLESETTINGS = 0x0803;
490 const sal_uInt16 BIFF_ID_QUERYTABLESTRING   = 0x0804;
491 const sal_uInt16 BIFF_ID_RECALCID           = 0x01C1;
492 const sal_uInt16 BIFF_ID_REFMODE            = 0x000F;
493 const sal_uInt16 BIFF_ID_RIGHTMARGIN        = 0x0027;
494 const sal_uInt16 BIFF_ID_RK                 = 0x027E;
495 const sal_uInt16 BIFF2_ID_ROW               = 0x0008;
496 const sal_uInt16 BIFF3_ID_ROW               = 0x0208;
497 const sal_uInt16 BIFF_ID_RSTRING            = 0x00D6;
498 const sal_uInt16 BIFF_ID_SAVERECALC         = 0x005F;
499 const sal_uInt16 BIFF_ID_SCENARIO           = 0x00AF;
500 const sal_uInt16 BIFF_ID_SCENARIOS          = 0x00AE;
501 const sal_uInt16 BIFF_ID_SCL                = 0x00A0;
502 const sal_uInt16 BIFF_ID_SCENPROTECT        = 0x00DD;
503 const sal_uInt16 BIFF_ID_SCREENTIP          = 0x0800;
504 const sal_uInt16 BIFF_ID_SELECTION          = 0x001D;
505 const sal_uInt16 BIFF_ID_SHAREDFEATHEAD     = 0x0867;
506 const sal_uInt16 BIFF_ID_SHAREDFMLA         = 0x04BC;
507 const sal_uInt16 BIFF_ID_SHEET              = 0x0085;
508 const sal_uInt16 BIFF_ID_SHEETEXT           = 0x0862;
509 const sal_uInt16 BIFF_ID_SHEETHEADER        = 0x008F;
510 const sal_uInt16 BIFF_ID_SHEETPR            = 0x0081;
511 const sal_uInt16 BIFF_ID_SST                = 0x00FC;
512 const sal_uInt16 BIFF_ID_STANDARDWIDTH      = 0x0099;
513 const sal_uInt16 BIFF2_ID_STRING            = 0x0007;
514 const sal_uInt16 BIFF3_ID_STRING            = 0x0207;
515 const sal_uInt16 BIFF_ID_STYLE              = 0x0293;
516 const sal_uInt16 BIFF_ID_STYLEEXT           = 0x0892;
517 const sal_uInt16 BIFF_ID_TABLESTYLES        = 0x088E;
518 const sal_uInt16 BIFF_ID_THEME              = 0x0896;
519 const sal_uInt16 BIFF_ID_TOPMARGIN          = 0x0028;
520 const sal_uInt16 BIFF_ID_TXO                = 0x01B6;
521 const sal_uInt16 BIFF_ID_UNCALCED           = 0x005E;
522 const sal_uInt16 BIFF_ID_USESELFS           = 0x0160;
523 const sal_uInt16 BIFF_ID_VBAPROJECT         = 0x00D3;
524 const sal_uInt16 BIFF_ID_VBAPROJECTEMPTY    = 0x01BD;
525 const sal_uInt16 BIFF_ID_VCENTER            = 0x0084;
526 const sal_uInt16 BIFF_ID_VERPAGEBREAKS      = 0x001A;
527 const sal_uInt16 BIFF_ID_WINDOW1            = 0x003D;
528 const sal_uInt16 BIFF2_ID_WINDOW2           = 0x003E;
529 const sal_uInt16 BIFF3_ID_WINDOW2           = 0x023E;
530 const sal_uInt16 BIFF_ID_WRITEACCESS        = 0x005C;
531 const sal_uInt16 BIFF_ID_XCT                = 0x0059;
532 const sal_uInt16 BIFF2_ID_XF                = 0x0043;
533 const sal_uInt16 BIFF3_ID_XF                = 0x0243;
534 const sal_uInt16 BIFF4_ID_XF                = 0x0443;
535 const sal_uInt16 BIFF5_ID_XF                = 0x00E0;
536 const sal_uInt16 BIFF_ID_XFCRC              = 0x087C;
537 const sal_uInt16 BIFF_ID_XFEXT              = 0x087D;
538 
539 const sal_uInt16 BIFF_ID_UNKNOWN            = SAL_MAX_UINT16;
540 
541 // OBJ subrecord identifiers --------------------------------------------------
542 
543 const sal_uInt16 BIFF_ID_OBJEND             = 0x0000;   /// End of OBJ.
544 const sal_uInt16 BIFF_ID_OBJMACRO           = 0x0004;   /// Macro link.
545 const sal_uInt16 BIFF_ID_OBJBUTTON          = 0x0005;   /// Button data.
546 const sal_uInt16 BIFF_ID_OBJGMO             = 0x0006;   /// Group marker.
547 const sal_uInt16 BIFF_ID_OBJCF              = 0x0007;   /// Clipboard format.
548 const sal_uInt16 BIFF_ID_OBJFLAGS           = 0x0008;   /// Option flags.
549 const sal_uInt16 BIFF_ID_OBJPICTFMLA        = 0x0009;   /// OLE link formula.
550 const sal_uInt16 BIFF_ID_OBJCBLS            = 0x000A;   /// Check box/radio button data.
551 const sal_uInt16 BIFF_ID_OBJRBO             = 0x000B;   /// Radio button group data.
552 const sal_uInt16 BIFF_ID_OBJSBS             = 0x000C;   /// Scroll bar data.
553 const sal_uInt16 BIFF_ID_OBJNTS             = 0x000C;   /// Note data.
554 const sal_uInt16 BIFF_ID_OBJSBSFMLA         = 0x000E;   /// Scroll bar/list box/combo box cell link.
555 const sal_uInt16 BIFF_ID_OBJGBODATA         = 0x000F;   /// Group box data.
556 const sal_uInt16 BIFF_ID_OBJEDODATA         = 0x0010;   /// Edit box data.
557 const sal_uInt16 BIFF_ID_OBJRBODATA         = 0x0011;   /// Radio button group data.
558 const sal_uInt16 BIFF_ID_OBJCBLSDATA        = 0x0012;   /// Check box/radio button data.
559 const sal_uInt16 BIFF_ID_OBJLBSDATA         = 0x0013;   /// List box/combo box data.
560 const sal_uInt16 BIFF_ID_OBJCBLSFMLA        = 0x0014;   /// Check box/radio button cell link.
561 const sal_uInt16 BIFF_ID_OBJCMO             = 0x0015;   /// Common object settings.
562 
563 // record constants -----------------------------------------------------------
564 
565 const sal_uInt16 BIFF_BOF_BIFF2             = 0x0200;
566 const sal_uInt16 BIFF_BOF_BIFF3             = 0x0300;
567 const sal_uInt16 BIFF_BOF_BIFF4             = 0x0400;
568 const sal_uInt16 BIFF_BOF_BIFF5             = 0x0500;
569 const sal_uInt16 BIFF_BOF_BIFF8             = 0x0600;
570 
571 const sal_uInt8 BIFF_ERR_NULL               = 0x00;
572 const sal_uInt8 BIFF_ERR_DIV0               = 0x07;
573 const sal_uInt8 BIFF_ERR_VALUE              = 0x0F;
574 const sal_uInt8 BIFF_ERR_REF                = 0x17;
575 const sal_uInt8 BIFF_ERR_NAME               = 0x1D;
576 const sal_uInt8 BIFF_ERR_NUM                = 0x24;
577 const sal_uInt8 BIFF_ERR_NA                 = 0x2A;
578 
579 const sal_uInt8 BIFF_DATATYPE_EMPTY         = 0;
580 const sal_uInt8 BIFF_DATATYPE_DOUBLE        = 1;
581 const sal_uInt8 BIFF_DATATYPE_STRING        = 2;
582 const sal_uInt8 BIFF_DATATYPE_BOOL          = 4;
583 const sal_uInt8 BIFF_DATATYPE_ERROR         = 16;
584 
585 const sal_uInt8 BIFF_BOOLERR_BOOL           = 0;
586 const sal_uInt8 BIFF_BOOLERR_ERROR          = 1;
587 
588 // BIFF8 unicode strings ------------------------------------------------------
589 
590 const sal_uInt8 BIFF_STRF_16BIT             = 0x01;
591 const sal_uInt8 BIFF_STRF_PHONETIC          = 0x04;
592 const sal_uInt8 BIFF_STRF_RICH              = 0x08;
593 const sal_uInt8 BIFF_STRF_UNKNOWN           = 0xF2;
594 
595 // ============================================================================
596 
597 /** Static helper functions for BIFF filters. */
598 class BiffHelper
599 {
600 public:
601     // conversion -------------------------------------------------------------
602 
603     /** Converts the passed packed number to a double. */
604     static double       calcDoubleFromRk( sal_Int32 nRkValue );
605     /** Converts the passed double to a packed number, returns true on success. */
606     static bool         calcRkFromDouble( sal_Int32& ornRkValue, double fValue );
607 
608     /** Converts the passed BIFF error to a double containing the respective Calc error code. */
609     static double       calcDoubleFromError( sal_uInt8 nErrorCode );
610 
611     /** Returns a text encoding from an Windows code page.
612         @return  The corresponding text encoding or RTL_TEXTENCODING_DONTKNOW. */
613     static rtl_TextEncoding calcTextEncodingFromCodePage( sal_uInt16 nCodePage );
614     /** Returns a Windows code page from a text encoding. */
615     static sal_uInt16   calcCodePageFromTextEncoding( rtl_TextEncoding eTextEnc );
616 
617     // BIFF12 import ----------------------------------------------------------
618 
619     /** Reads a BIFF12 string with leading 16-bit or 32-bit length field. */
620     static ::rtl::OUString readString( SequenceInputStream& rStrm, bool b32BitLen = true, bool bAllowNulChars = false );
621 
622     // BIFF2-BIFF8 import -----------------------------------------------------
623 
624     /** Returns true, if the current record of the stream is a BOF record. */
625     static bool         isBofRecord( BiffInputStream& rStrm );
626 
627     /** Skips a block of records up to the specified end record.
628 
629         Skips all records until next end record. When this function returns,
630         the stream points to the end record, and the next call of the function
631         startNextRecord() at the stream will start the record following the end
632         record.
633 
634         The identifier of the record that is active while this function is
635         called is used as start record identifier. This identifier is used to
636         correctly skip embedded record blocks with the same start and end
637         record identifier.
638 
639         @return  True = stream points to the end record.
640      */
641     static bool         skipRecordBlock( BiffInputStream& rStrm, sal_uInt16 nEndRecId );
642 
643     /** Imports a picture from an IMGDATA record. */
644     static void         importImgData( StreamDataSequence& orDataSeq, BiffInputStream& rStrm, BiffType eBiff );
645 
646 private:
647                         BiffHelper();   // not implemented
648                         ~BiffHelper();  // not implemented
649 };
650 
651 // ----------------------------------------------------------------------------
652 
653 /** BIFF12 stream operator for an ::rtl::OUString, reads 32-bit string length and Unicode array. */
operator >>(SequenceInputStream & rStrm,::rtl::OUString & orString)654 inline SequenceInputStream& operator>>( SequenceInputStream& rStrm, ::rtl::OUString& orString )
655 {
656     orString = BiffHelper::readString( rStrm );
657     return rStrm;
658 }
659 
660 // ============================================================================
661 
662 } // namespace xls
663 } // namespace oox
664 
665 #endif
666