1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #pragma once
21 
22 #include <address.hxx>
23 
24 // Common =====================================================================
25 
26 // BIFF versions --------------------------------------------------------------
27 
28 /** An enumeration for all Excel file format types (BIFF types). */
29 enum XclBiff
30 {
31     EXC_BIFF2 = 0,              /// MS Excel 2.1
32     EXC_BIFF3,                  /// MS Excel 3.0
33     EXC_BIFF4,                  /// MS Excel 4.0
34     EXC_BIFF5,                  /// MS Excel 5.0, MS Excel 7.0 (95)
35     EXC_BIFF8,                  /// MS Excel 8.0 (97), 9.0 (2000), 10.0 (XP), 11.0 (2003)
36     EXC_BIFF_UNKNOWN            /// Unknown BIFF version.
37 };
38 
39 /** An enumeration for all Excel output format types. */
40 enum XclOutput
41 {
42     EXC_OUTPUT_BINARY,          /// MS Excel binary .xls
43     EXC_OUTPUT_XML_2007,        /// MS Excel 2007 .xlsx
44 };
45 
46 // Excel sheet dimensions -----------------------------------------------------
47 
48 const SCCOL EXC_MAXCOL2                     = 255;
49 const SCROW EXC_MAXROW2                     = 16383;
50 const SCTAB EXC_MAXTAB2                     = 0;
51 
52 const SCCOL EXC_MAXCOL3                     = EXC_MAXCOL2;
53 const SCROW EXC_MAXROW3                     = EXC_MAXROW2;
54 const SCTAB EXC_MAXTAB3                     = EXC_MAXTAB2;
55 
56 const SCCOL EXC_MAXCOL4                     = EXC_MAXCOL3;
57 const SCROW EXC_MAXROW4                     = EXC_MAXROW3;
58 const SCTAB EXC_MAXTAB4                     = 32767;
59 
60 const SCCOL EXC_MAXCOL5                     = EXC_MAXCOL4;
61 const SCROW EXC_MAXROW5                     = EXC_MAXROW4;
62 const SCTAB EXC_MAXTAB5                     = EXC_MAXTAB4;
63 
64 const SCCOL EXC_MAXCOL8                     = EXC_MAXCOL5;
65 const SCROW EXC_MAXROW8                     = 65535;
66 const SCTAB EXC_MAXTAB8                     = EXC_MAXTAB5;
67 
68 const SCCOL EXC_MAXCOL_XML_2007             = 16383;
69 const SCROW EXC_MAXROW_XML_2007             = 1048575;
70 const SCTAB EXC_MAXTAB_XML_2007             = 1023;
71 
72 const sal_uInt16 EXC_NOTAB                  = SAL_MAX_UINT16;   /// An invalid Excel sheet index, for common use.
73 const SCTAB SCTAB_INVALID                   = SCTAB_MAX;        /// An invalid Calc sheet index, for common use.
74 const SCTAB SCTAB_GLOBAL                    = SCTAB_MAX;        /// A Calc sheet index for the workbook globals.
75 
76 // Storage/stream names -------------------------------------------------------
77 
78 #define EXC_STORAGE_OLE_LINKED              "LNK"
79 #define EXC_STORAGE_OLE_EMBEDDED            "MBD"
80 #define EXC_STORAGE_VBA_PROJECT             "_VBA_PROJECT_CUR"
81 
82 #define EXC_STREAM_BOOK                     "Book"
83 #define EXC_STREAM_WORKBOOK                 "Workbook"
84 #define EXC_STREAM_CTLS                     "Ctls"
85 
86 // Encoded URLs ---------------------------------------------------------------
87 
88 const sal_Unicode EXC_URLSTART_ENCODED      = '\x01';   /// Encoded URL.
89 const sal_Unicode EXC_URLSTART_SELF         = '\x02';   /// Reference to own workbook.
90 const sal_Unicode EXC_URLSTART_SELFENCODED  = '\x03';   /// Encoded self reference.
91 const sal_Unicode EXC_URLSTART_OWNDOC       = '\x04';   /// Reference to own workbook (BIFF5/BIFF7).
92 
93 const sal_Unicode EXC_URL_DOSDRIVE          = '\x01';   /// DOS drive letter or UNC server name.
94 const sal_Unicode EXC_URL_DRIVEROOT         = '\x02';   /// Root directory of current drive.
95 const sal_Unicode EXC_URL_SUBDIR            = '\x03';   /// Directory name delimiter.
96 const sal_Unicode EXC_URL_PARENTDIR         = '\x04';   /// Parent directory.
97 const sal_Unicode EXC_URL_RAW               = '\x05';   /// Unencoded URL.
98 const sal_Unicode EXC_URL_SHEETNAME         = '\x09';   /// Sheet name starts here (BIFF4).
99 
100 const sal_Unicode EXC_DDE_DELIM             = '\x03';   /// DDE application-topic delimiter
101 
102 // Error codes ----------------------------------------------------------------
103 
104 const sal_uInt8 EXC_ERR_NULL                = 0x00;
105 const sal_uInt8 EXC_ERR_DIV0                = 0x07;
106 const sal_uInt8 EXC_ERR_VALUE               = 0x0F;
107 const sal_uInt8 EXC_ERR_REF                 = 0x17;
108 const sal_uInt8 EXC_ERR_NAME                = 0x1D;
109 const sal_uInt8 EXC_ERR_NUM                 = 0x24;
110 const sal_uInt8 EXC_ERR_NA                  = 0x2A;
111 
112 // Cached values list (EXTERNNAME, ptgArray, ...) -----------------------------
113 
114 const sal_uInt8 EXC_CACHEDVAL_EMPTY         = 0x00;
115 const sal_uInt8 EXC_CACHEDVAL_DOUBLE        = 0x01;
116 const sal_uInt8 EXC_CACHEDVAL_STRING        = 0x02;
117 const sal_uInt8 EXC_CACHEDVAL_BOOL          = 0x04;
118 const sal_uInt8 EXC_CACHEDVAL_ERROR         = 0x10;
119 
120 // RK values ------------------------------------------------------------------
121 
122 const sal_Int32 EXC_RK_100FLAG              = 0x00000001;
123 const sal_Int32 EXC_RK_INTFLAG              = 0x00000002;
124 const sal_Int32 EXC_RK_VALUEMASK            = 0xFFFFFFFC;
125 
126 const sal_Int32 EXC_RK_DBL                  = 0x00000000;
127 const sal_Int32 EXC_RK_DBL100               = EXC_RK_100FLAG;
128 const sal_Int32 EXC_RK_INT                  = EXC_RK_INTFLAG;
129 const sal_Int32 EXC_RK_INT100               = EXC_RK_100FLAG | EXC_RK_INTFLAG;
130 
131 // Measures -------------------------------------------------------------------
132 
133 const sal_uInt8 EXC_ORIENT_NONE             = 0;        /// Text orientation: not rotated.
134 const sal_uInt8 EXC_ORIENT_STACKED          = 1;        /// Text orientation: vertically stacked.
135 const sal_uInt8 EXC_ORIENT_90CCW            = 2;        /// Text orientation: 90 deg counterclockwise.
136 const sal_uInt8 EXC_ORIENT_90CW             = 3;        /// Text orientation: 90 deg clockwise.
137 
138 const sal_uInt8 EXC_ROT_NONE                = 0;        /// Text rotation: not rotated.
139 const sal_uInt8 EXC_ROT_90CCW               = 90;       /// Text rotation: 90 deg counterclockwise.
140 const sal_uInt8 EXC_ROT_90CW                = 180;      /// Text rotation: 90 deg clockwise.
141 const sal_uInt8 EXC_ROT_STACKED             = 255;      /// Text rotation: vertically stacked.
142 
143 // Records (ordered by lowest record ID) ======================================
144 
145 // (0x0009, 0x0209, 0x0409, 0x0809) BOF ---------------------------------------
146 
147 const sal_uInt16 EXC_ID2_BOF                = 0x0009;
148 const sal_uInt16 EXC_ID3_BOF                = 0x0209;
149 const sal_uInt16 EXC_ID4_BOF                = 0x0409;
150 const sal_uInt16 EXC_ID5_BOF                = 0x0809;
151 
152 const sal_uInt16 EXC_BOF_BIFF2              = 0x0200;
153 const sal_uInt16 EXC_BOF_BIFF3              = 0x0300;
154 const sal_uInt16 EXC_BOF_BIFF4              = 0x0400;
155 const sal_uInt16 EXC_BOF_BIFF5              = 0x0500;
156 const sal_uInt16 EXC_BOF_BIFF8              = 0x0600;
157 
158 const sal_uInt16 EXC_BOF_GLOBALS            = 0x0005;   /// BIFF5-BIFF8 workbook globals.
159 const sal_uInt16 EXC_BOF_VBMODULE           = 0x0006;   /// BIFF5-BIFF8 Visual BASIC module.
160 const sal_uInt16 EXC_BOF_SHEET              = 0x0010;   /// Regular worksheet.
161 const sal_uInt16 EXC_BOF_CHART              = 0x0020;   /// Chart sheet.
162 const sal_uInt16 EXC_BOF_MACROSHEET         = 0x0040;   /// Macro sheet.
163 const sal_uInt16 EXC_BOF_WORKSPACE          = 0x0100;   /// Workspace.
164 const sal_uInt16 EXC_BOF_UNKNOWN            = 0xFFFF;   /// Internal use only.
165 
166 // (0x000A) EOF ---------------------------------------------------------------
167 const sal_uInt16 EXC_ID_EOF                 = 0x000A;
168 
169 // (0x0012) PROTECT -----------------------------------------------------------
170 const sal_uInt16 EXC_ID_PROTECT             = 0x0012;
171 
172 // (0x0013) PASSWORD ----------------------------------------------------------
173 const sal_uInt16 EXC_ID_PASSWORD            = 0x0013;
174 
175 // (0x0019) WINDOWPROTECT -----------------------------------------------------
176 const sal_uInt16 EXC_ID_WINDOWPROTECT       = 0x0019;
177 
178 // (0x0042) CODEPAGE ----------------------------------------------------------
179 const sal_uInt16 EXC_ID_CODEPAGE            = 0x0042;
180 
181 // (0x0081) WSBOOL ------------------------------------------------------------
182 const sal_uInt16 EXC_ID_WSBOOL              = 0x0081;
183 
184 const sal_uInt16 EXC_WSBOOL_ROWBELOW        = 0x0040;
185 const sal_uInt16 EXC_WSBOOL_COLBELOW        = 0x0080;
186 const sal_uInt16 EXC_WSBOOL_FITTOPAGE       = 0x0100;
187 
188 const sal_uInt16 EXC_WSBOOL_DEFAULTFLAGS    = 0x04C1;
189 
190 // (0x0086) WRITEPROT ---------------------------------------------------------
191 const sal_uInt16 EXC_ID_WRITEPROT           = 0x0086;
192 
193 // (0x008C) COUNTRY -----------------------------------------------------------
194 const sal_uInt16 EXC_ID_COUNTRY             = 0x008C;
195 
196 // (0x009B) FILTERMODE --------------------------------------------------------
197 const sal_uInt16 EXC_ID_FILTERMODE          = 0x009B;
198 
199 // (0x009C) FNGROUPCOUNT ------------------------------------------------------
200 const sal_uInt16 EXC_ID_FNGROUPCOUNT        = 0x009C;
201 
202 // (0x009D) AUTOFILTERINFO ----------------------------------------------------
203 const sal_uInt16 EXC_ID_AUTOFILTERINFO      = 0x009D;
204 
205 // (0x009E) AUTOFILTER --------------------------------------------------------
206 const sal_uInt16 EXC_ID_AUTOFILTER          = 0x009E;
207 
208 // (0x00BF, 0x00C0, 0x00C1) TOOLBARHDR, TOOLBAREND, MMS -----------------------
209 const sal_uInt16 EXC_ID_TOOLBARHDR          = 0x00BF;
210 const sal_uInt16 EXC_ID_TOOLBAREND          = 0x00C0;
211 const sal_uInt16 EXC_ID_MMS                 = 0x00C1;
212 
213 // (0x00E1, 0x00E2) INTERFACEHDR, INTERFACEEND --------------------------------
214 const sal_uInt16 EXC_ID_INTERFACEHDR        = 0x00E1;
215 const sal_uInt16 EXC_ID_INTERFACEEND        = 0x00E2;
216 
217 // (0x0160) USESELFS ----------------------------------------------------------
218 const sal_uInt16 EXC_ID_USESELFS            = 0x0160;
219 
220 // (0x0161) DSF ---------------------------------------------------------------
221 const sal_uInt16 EXC_ID_DSF                 = 0x0161;
222 
223 // (0x01AA,0x01AB) USERSVIEWBEGIN, USERSVIEWEND -------------------------------
224 const sal_uInt16 EXC_ID_USERSVIEWBEGIN      = 0x01AA;
225 const sal_uInt16 EXC_ID_USERSVIEWEND        = 0x01AB;
226 
227 // (0x01BA) CODENAME ----------------------------------------------------------
228 const sal_uInt16 EXC_ID_CODENAME            = 0x01BA;
229 
230 // (0x01C0) XL9FILE -----------------------------------------------------------
231 const sal_uInt16 EXC_ID_XL9FILE             = 0x01C0;
232 
233 // (0x8xx) Future records -----------------------------------------------------
234 
235 /** Enumerates different header types of future records. */
236 enum XclFutureRecType
237 {
238     EXC_FUTUREREC_SIMPLE,           /// Record identifier and empty flags field.
239     EXC_FUTUREREC_UNUSEDREF         /// Record identifier, empty flags field, unused range address.
240 };
241 
242 const sal_uInt16 EXC_FUTUREREC_EMPTYFLAGS   = 0x0000;
243 const sal_uInt16 EXC_FUTUREREC_HASREF       = 0x0001;
244 const sal_uInt16 EXC_FUTUREREC_ALERT        = 0x0002;
245 
246 // Border import/export
247 
248 const sal_uInt16 EXC_BORDER_THICK  = 50;
249 const sal_uInt16 EXC_BORDER_MEDIUM = 35;
250 const sal_uInt16 EXC_BORDER_THIN   = 15;
251 const sal_uInt16 EXC_BORDER_HAIR   = 1;
252 
253 // SharedFeatureType enumeration
254 const sal_uInt16 EXC_ISFPROTECTION = 0x0002;
255 const sal_uInt16 EXC_ISFFEC2       = 0x0003;
256 const sal_uInt16 EXC_ISFFACTOID    = 0x0004;
257 const sal_uInt16 EXC_ISFLIST       = 0x0005;
258 
259 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
260