MICROSOFT EXCEL FILE FORMAT Microsoft Excel is a popular spreadsheet. It uses a file format called BIFF (Binary File Format). There are many types of BIFF records. Each has a 4 byte header. The first two bytes are an opcode that specifies the record type. The second two bytes specify record length. Header values are stored in byte-reversed form (less significant byte first). The rest of the record is the data itself (Figure 2-1). Figure 2-1. BIFF record header. | Record Header | Record Body Byte Number | 0 1 2 3 | 0 1 ... ----------------------------------- Record Contents | XX | XX | XX | XX | XX | XX | ... ----------------------------------- | opcode | length | data Each X represents a hexadecimal digit Two X's form a byte. The least significant (low) byte of the opcode is byte 0 and the most significant (high) byte is byte 1. Similarly, the low byte of the record length field is byte 2 and the high byte is byte 3. BOF (Beginning of File) The first record in every spreadsheet is always of the BOF type (Figure 2-2). Figure 2-2. BOF record. | Record Header | Record Body | Byte | 0 1 2 3 | 0 1 2 3 | ----------------------------------------- Contents | 09 | 00 | 04 | 00 | 02 | 00 | 10 | 00 | ----------------------------------------- | opcode | length | version | file | | | | number | type | The first two bytes, arranged with the low byte first, show that the opcode for BOF is 09h. The second two bytes indicate that the record body is 4 bytes long. The first two bytes of the body are the version number (2 for the initial version of Excel). The last two bytes are the file type. Type 10h is a worksheet file. Relating Spreadsheet Cells to Record Data Bytes A spreadsheet appears on a screen or printout as a matrix of rectangular cells. Each column is identified by a letter at its top, and each row is identified by a number. Thus cell A1 is in the first column and the first row. Cell C240 is in the third column and the 240th row. This scheme identifies cells in a way easily understood by people. However, it is not particularly convenient for computers, as they do not handle letters efficiently. They are best at dealing with binary numbers. Thus, Excel stores cell identifiers as binary numbers, that people can read as hexadecimal. The first number in the system is 0 rather than 1. Figure 2-3, which shows the form of an INTEGER record, illustrates the storage of column and row information. Figure 2-3. INTEGER record. | Record Header | Record Body Byte | 0 1 2 3 | 0 1 2 3 4 5 6 7 8 | ------------------------------------------------------------------ Value | 02 | 00 | 09 | 00 | 00 | 00 | 02 | 00 | 00 | 00 | 00 | 39 | 00 | ------------------------------------------------------------------ | opcode | length | row | column | rgbAttr | w | Opcode 2 indicates an integer record. The length bytes show that the record body is 9 bytes long. Row 0 in the body corresponds to spreadsheet row 1. Row 1 corresponds to spreadsheet row 2, and so on. Column 2 corresponds to spreadsheet column C. Thus, Figure 2-3 deals with cell C1. The next three bytes, labeled "rgbAttr," specify cell attributes (Table 2-3). The final pair of bytes, (labeled "w") holds the integer's value. Here it is 39H or 57 decimal. Thus the record specifies that cell C1 of the spreadsheet contains an integer with the value 57. Standard File Record Order Excel worksheet files have each record type in a predetermined position. A file need not have all types, but the ones that are present are always be in the same order. Table 2-1 lists the record types for Excel document (spreadsheet) files, in the order they would appear in a BIFF file. Table 2-2 lists the types in opcode order. Several record types in a BIFF file, namely, ROW, BLANK, INTEGER, NUMBER, LABEL, BOOLERR, FORMULA, and COLUMN DEFAULT, describe the contents of a cell. These records contain a 3 byte attribute field labeled "rgbAttr". The following table describes how the bits in the field correspond to cell attributes. Table 2-1. Cell Attributes Byte Offset Bit Description Contents 0 7 Cell is not hidden 0b Cell is hidden 1b 6 Cell is not locked 0b Cell is locked 1b 5-0 Reserved, must be 0 000000b 7-6 Font number (4 possible) 5-0 Cell format code 2 7 Cell is not shaded 0b Cell is shaded 1b 6 Cell has no bottom border 0b Cell has a bottom border 1b 5 Cell has no top border 0b Cell has a top border 1b 4 Cell has no right border 0b Cell has a right border 1b 3 Cell has no left border 0b Cell has a left border 1b 2-0 Cell alignment code general 000b left 001b center 010b right 011b fill 100b Multiplan default align. 111b The font number field is a zero-based index into the document's table of fonts. the cell format code is a zero-based index into the document's table of picture formats. There are 21 different standard formats. Additional custom formats may be defined by the user. See the FONT and FORMAT record descriptions form additonal details. Table 2-2. Excel Record Type in Order of Appearance Record Type Opcode (Hexadecimal) BOF 09 FILEPASS 2F INDEX 0B CALCCOUNT 0C CALCMODE 0D PRECISION 0E REFMODE 0F DELTA 10 ITERATION 11 1904 22 BACKUP 40 PRINT ROW HEADERS 2A PRINT GRIDLINES 2B HORIZONTAL PAGE BREAKS 1B VERTICAL PAGE BREAKS 1A DEFAULT ROW HEIGHT 25 FONT 31 FONT2 32 HEADER 14 FOOTER 15 LEFT MARGIN 26 RIGHT MARGIN 27 TOP MARGIN 28 BOTTOM MARGIN 29 COLWIDTH 24 EXTERNCOUNT 16 EXTERNSHEET 17 EXTERNNAME 23 FORMATCOUNT 1F FORMAT 1E NAME 18 DIMENSIONS 00 COLUMN DEFAULT 20 ROW 08 BLANK 01 INTEGER 02 NUMBER 03 LABEL 04 BOOLERR 05 FORMULA 06 ARRAY 21 CONTINUE 3C STRING 07 TABLE 36 TABLE2 37 PROTECT 12 WINDOW PROTECT 19 PASSWORD 13 NOTE 1C WINDOW1 3D WINDOW2 3E PANE 41 SELECTION 1D EOF 0A Table 2-3. Excel Record Types in Opcode Order Record Type Opcode (hexadecimal) DIMENSIONS 00 BLANK 01 INTEGER 02 NUMBER 03 LABEL 04 BOOLERR 05 FORMULA 06 STRING 07 ROW 08 BOF 09 EOF 0A INDEX 0B CALCCOUNT 0C CALCMODE 0D PRECISION 0E REFMODE 0F DELTA 10 ITERATION 11 PROTECT 12 PASSWORD 13 HEADER 14 FOOTER 15 EXTERNCOUNT 16 EXTERNSHEET 17 NAME 18 WINDOW PROTECT 19 VERTICAL PAGE BREAKS 1A HORIZONTAL PAGE BREAKS 1B NOTE 1C SELECTION 1D FORMAT 1E FORMATCOUNT 1F COLUMN DEFAULT 20 ARRAY 21 1904 22 EXTERNNAME 23 COLWIDTH 24 DEFAULT ROW HEIGHT 25 LEFT MARGIN 26 RIGHT MARGIN 27 TOP MARGIN 28 BOTTOM MARGIN 29 PRINT ROW HEADERS 2A PRINT GRIDLINES 2B FILEPASS 2F FONT 31 FONT2 32 TABLE 36 TABLE2 37 CONTINUE 3C WINDOW1 3D WINDOW2 3E BACKUP 40 PANE 41 Worksheet Record Types in Opcode Order The following section lists all record types in opcode order. It gives a specification and byte-by-byte breakdown of each type. Note that Excel terminology refers to spreadsheets or worksheets as "documents." DIMENSIONS 00h 0d Record Type: DIMENSIONS Description: Entire dimensions or range of a spreadsheet Record Body Length: 8 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 First row 2-3 Last row plus 1 4-5 First column 6-7 Last column plus 1 Note: The last row and column in the record are both one greater than the highest numbered occupied ones. BLANK 01h 1d Record Type: BLANK Description: Cell with no formula or value Record Body Length: 7 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (Table 2-3) INTEGER 02h 2d Record Type: INTEGER Description: Constant unsigned integer Record Body Length: 9 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (Table 2-3) 7-8 Unsigned integer value (w) NUMBER 03h 3d Record Type: NUMBER Description: Constant floating point number Record Body Length: 15 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (Table 2-3) 7-14 Floating point number value (IEEE format, see Appendix A) LABEL 04h 4d Record Type: LABEL Description: Constant string Record Body Length: 8 to 263 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (Table 2-3) 7 Length of string 8-263 ASCII string, 0 to 255 bytes long BOOLERR 05h 5d Record Type: BOOLERR Description: Boolean constant or error value Record Body Length: 9 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (Table 2-3) 7 Boolean or error value Boolean true 1 false 0 Error #NULL! 0 #DIV/0! 7 #VALUE! 0Fh #REF! 17h #NAME? 1Dh #NUM! 24h #N/A 2Ah 8 Specifies Boolean or error Boolean 0 Error 1 FORMULA 06h 6d Record Type: FORMULA Description: Name, size, and contents of a formula cell Record Body Length: 17-272 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row 2-3 Column 4-6 Cell attributes (rgbAttr) (see Table 2-3) 7 Current value of formula (IEEE format, see Appendix A) 15 Recalc flag 16 Length of parsed expression 17 Parsed expression If a formula must be recalculated whenever it is loaded, the recalc flag (byte 15) must be set. Any nonzero value is a set recalc flag. However, a flag value of 3 indicates that the cell is a part of a matrix, and the entire matrix must be recalculated. Bytes 7 through 14 may contain a number, a Boolean value, an error code, or a string. The following tables apply. Case 1: Bytes 7 - 14 contain a Boolean value. Byte Number Byte Description Contents (hex) 7 otBool 1 8 Reserved 0 9 Boolean value 10-12 Reserved 0 13-14 fExprO FFFFh Case 2: Bytes 7 - 14 contain an error code. Byte Number Byte Description Contents (hex) 7 otErr 2 8 Reserved 0 9 error code 10-12 Reserved 0 13-14 fExprO FFFFh Case 3: Bytes 7 - 14 contain a string. Byte Number Byte Description Contents (hex) 7 otString 0 8-12 Reserved 0 13-14 fExprO FFFFh The string value itself is not stored in the field, but rather in a separate record of the STRING type. STRING 07h 7d Record Type: STRING Description: Value of a string in a formula Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of the string 1-256 (max) The string itself The STRING record appears immediately after the FORMULA record that evaluates to the string, unless the formula is in an array. In that case, the string record immediately follows the ARRAY record. ROW 08h 8d Record Type: ROW Description: Specifies a spreadsheet row Record Body Length: 16 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row number 2-3 First defined column in the row 4-5 Last defined column in the row plus 1 6-7 Row height 8-9 RESERVED 0 10 Default cell attributes byte Default attributes 1 Not default attributes 0 11-12 Offset to cell records for this row 13-15 Cell attributes (rgbAttr) (see Table 2-3) BOF 09h 9d Record Type: BOF Description: Beginning of file Record Body Length: 4 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Version number Excel 2 Multiplan 3 2-3 Document type worksheet 10h chart 20h macro sheet 40h If bit 8 of the version number byte pair is high (mask with 0100h to find out), the BIFF file is a Multiplan document. EOF 0Ah 10d Record Type: EOF Description: End of file Record Body Length: 0 bytes The EOF record is the last one in a BIFF file. It always takes the form 0A000000h. INDEX 0Bh 11d Record Type: INDEX Description: Contains pointers to other records in the BIFF file, and defines the range of rows used by the document. It is used to simplify searching a file for a particular cell or name. Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-3 Absolute file position of first NAME record 4-5 First row that exists 6-7 Last row that exists plus 1 8-on Array of absolute file positions of the blocks of ROW records. The INDEX record is optional. If present, it must immediately follow the FILEPASS record. IF there is no FILEPASS record, it must follow the BOF record. CALCCOUNT 0Ch 12d Record Type: CALCCOUNT Description: Specifies the iteration count Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Iteration Count CALCMODE 0Dh 13d Record Type: CALCMODE Description: Specifies the calculation mode Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Calculation mode Manual 0 Automatic 1 Automatic, no tables -1 PRECISION 0Eh 14d Record Type: PRECISION Description: Specifies precision of calculations for document Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Document precision precision as displayed 0 full precision 1 REFMODE 0Fh 15d Record Type: REFMODE Description: Specifies location reference mode Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Reference mode R1C1 mode 0 A1 mode 1 DELTA 10h 16d Record Type: DELTA Description: Maximum change for an iterative model Record Body Length: 8 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-7 Maximum change (IEEE format, see Appendix A) ITERATION 11h 17d Record Type: ITERATION Description: Specifies whether iteration is on Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Iteration flag Iteration off 0 Iteration on 1 PROTECT 12h 18d Record Type: PROTECT Description: Specifies whether the document is protected with a document password Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Document protection Not protected 0 Protected 1 PASSWORD 13h 19d Record Type: PASSWORD Description: Contains encrypted document password Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Encrypted password HEADER 14h 20d Record Type: HEADER Description: Specifies header string that appears at the top of every page when the document is printed Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of string (bytes) 1-on Header string (ASCII) FOOTER 15h 21d Record Type: FOOTER Description: Specifies footer string that appears at the bottom of every page when the document is printed Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of string (bytes) 1-on Footer string (ASCII) EXTERNCOUNT 16h 22d Record Type: EXTERNCOUNT Description: Specifies the number of documents referenced externally by an Excel document Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Number of externally referenced documents EXTERNSHEET 17h 23d Record Type: EXTERNSHEET Description: Specifies a document that is referenced externally by the Excel file. There must be an EXTERNSHEET record for every external file counted by the EXTERNCOUNT record. Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of document name 1-on Document name The document name may be encoded. If so, its first character will be 0, 1 or 2. 0 indicates the document name is an external reference to an empty sheet. 1 indicates the document name has been translated to a less sys-tem-dependent name. This feature is valuable for documents intended for a non-DOS environment. 2 indicates that the externally referenced document is, in fact, the current document. NAME 18h 24d Record Type: NAME Description: User-defined name on the document Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Name attribute Only bits 1 and 2 are ever nonzero. Bit 1 is 1 if the name is a function or command name on a macro sheet. Bit 2 is 1 if the name definition includes: * A function that returns an array, such as TREND or MINVERSE * A ROW or COLUMN function * A user-defined function Name attribute Meaningful only if bit 1 of byte 0 is 1 (the name is a function or command name). Only bits 0 and 1 are ever nonzero. Bit 0 is 1 if the name is a function. Bit 1 is 1 if the name is a command. 2 Keyboard shortcut. Meaningful only if the name is a command. If no keyboard shortcut 0 If shortcut exists ASCII value 3 Length of the name text 4 Length of the name's definition 5-? Text of the name ?-? Name's definition (parsed) in internal compressed format ? Length of the name's definition (duplicate) All NAME records should appear together in a BIFF file. WINDOW PROTECT 19h 25d Record Type: WINDOW PROTECT Description: Specifies whether a document's windows are protected Record Body Length: 2 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Window protect flag Not protected 0 Protected 1 VERTICAL PAGE BREAKS 1Ah 26d Record Type: VERTICAL PAGE BREAKS Description: Lists all column page breaks Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Number of page breaks 2-on Array containing a 2-byte integer for each column that immediately follows a column page break. Columns must be sorted in ascending order. HORIZONTAL PAGE BREAKS 1Bh 27d Record Type: HORIZONTAL PAGE BREAKS Description: Lists all row page breaks Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Number of page breaks 2-on Array containing a 2-byte integer for each row that immediately follows a row page break. Rows must be sorted in ascending order. NOTE 1Ch 28d Record Type: NOTE Description: Note associated with a cell Record Body Length: Variable, maximum of 254 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row of the note 2-3 Column of the note 4-5 Length of the note part of the record 6-on Text of the note Notes longer than 2048 characters must be split among multiple records. All except the last one will contain 2048 text characters. The last one will contain the overflow. SELECTION 1Dh 29d Record Type: SELECTION Description: Specifies which cells are selected in a pane of a split window. It can also specify selected cells in a window that is not split. Record Body Length: Variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Number of pane bottom right 0 top right 1 bottom left 2 top left 3 no splits 3 1-2 Row number of the active cell 3-4 Column number of the active cell 5-6 Reference number of the active cell 7-8 Number of references in the selection 9-on Array of references Each reference in the array consists of 6 bytes arranged as follows: Byte Number Byte Description 0-1 First row in the reference 2-3 Last row in the reference 4 First column in the reference 5 Last column in the reference FORMAT 1Eh 30d Record Type: FORMAT Description: Describes a picture format in a document. All FORMAT records must appear together in a BIFF file. Record Body Length: Variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of format string 1-on Picture format string FORMATCOUNT 1Fh 31d Record Type: FORMATCOUNT Description: The number of standard FORMAT records in the file. There are 21 different format records. Record Body Length: 2 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Number of built in format records. COLUMN DEFAULT 20h 32d Record Type: COLUMN DEFAULT Description: Specifies default cell attributes for cells in a particular column. The default value is overriden for individual cells by a subsequent explicit definition. Record Body Length: Variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Column number of first column for which a default cell is being defined 2-3 Column number of last column for which a default cell is being defined, plus 1. 4-on Array of cell attributes ARRAY 21h 33d Record Type: ARRAY Description: Describes a formula entered into a range of cells as an array. Occurs immediately after the FORMULA record for the upper left corner of the array. Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 First row of the array 2-3 Last row of the array 4 First column of the array 5 Last column of the array 6 Recalculation flag Array is calculated 0 Needs to be calculated nonzero 7 Length of parsed expression 8-on Parsed expression (array formula) 1904 22h 34d Record Type: 1904 Description: Specifies date system used on this spreadsheet Record Body Length: 2 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Specifies date system used 1904 date system 1 anything else 0 EXTERNNAME 23h 35d Record Type: EXTERNNAME Description: An externally referenced name, referring to a work-sheet or macro sheet or to a DDE topic. All EXTERNNAME records associated with a supporting document must directly follow its EXTERNSHEET record. Record Body Length: Variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Length of the name 1-on The name When EXTERNNAME references a DDE topic, Excel may append its most recent values to the EXTERNNAME record. If the record becomes too long to be contained in a single record, it is split into multiple records, with CONTINUE records holding the excess. COLWIDTH 24h 36d Record Type: COLWIDTH Description: Sets column width for a range of columns Record Body Length: 3 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 First column in the range 1 Last column in the range 2-3 Column width in units of 1/256th of a character DEFAULT ROW HEIGHT 25h 37d Record Type: DEFAULT ROW HEIGHT Description: Specifies the height of all rows that are not defined explicitly Record Body Length: 2 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Default row height in units of 1/20th of a point LEFT MARGIN 26h 38d Record Type: LEFT MARGIN Description: Specifies the left margin in inches when the document is printed Record Body Length: 8 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-7 Left margin (IEEE format, see Appendix A) RIGHT MARGIN 27h 39d Record Type: RIGHT MARGIN Description: Specifies the right margin in inches when the document is printed Record Body Length: 8 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-7 Right margin (IEEE format, see Appendix A) TOP MARGIN 28h 40d Record Type: TOP MARGIN Description: Specifies the top margin in inches when the document is printed Record Body Length: 8 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-7 Top margin (IEEE format, see Appendix A) BOTTOM MARGIN 29h 41d Record Type: BOTTOM MARGIN Description: Specifies the bottom margin in inches when the document is printed Record Body Length: 8 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-7 Bottom margin (IEEE format, see Appendix A) PRINT ROW HEADERS 2Ah 42d Record Type: PRINT ROW HEADERS Description: Flag determines whether to include row and column headers on printout of document Record Body Length: Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Row and Column Header Print Flag Do not print headers 0 Print headers 1 PRINT GRIDLINES 2Bh 43d Record Type: PRINT GRIDLINES Description: Flag determines whether to print gridlines on print-out of document Record Body Length: 2 Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Gridline Print Flag Do not print gridlines 0 Print gridlines 1 FILEPASS 2Fh 47d Record Type: FILEPASS Description: Specifies a file password. If this record is present, the rest of the file is encrypted. The file password specified here is distinct from the document password specified by the PASSWORD record. If present, the FILEPASS record must immediately follow the BOF record. Record Body Length: ? Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-on ? FONT 31h 49d Record Type: FONT Description: Describes an entry in the document's font table. A document may have up to 4 different fonts, numbered 0 to 3. Font records are written in the font table in the order in which they are encountered in the file. Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (binary) 0-1 Height of the font (in 1/20ths of a point) 2-3 Font Attributes First byte (reserved) 00000000b Second byte Bit 0 - bold 1b Bit 1 - italic 1b Bit 2 - underline 1b Bit 2 - strikeout 1b Bits 4-7 (reserved) 0000b 4 Length of font name 5-? Font name FONT2 32h 50d Record Type: FONT2 Description: System specific information about the font defined in the previous FONT record. The FONT2 record is option-al. Record Body Length: Variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-on ? TABLE 36h 54d Record Type: TABLE Description: Describes a one-input row or column table created through the Data Table command Record Body Length: 12 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 First row of the table 2-3 Last row of the table 4 First column of the table 5 Last column of the table 6 Recalculation flag Table is recalculated 0 Not recalculated nonzero 7 Row or column input table flag Column input table 0 Row input table 1 8-9 Row of the input cell 10-11 Column of the input cell The area given by the first and last rows and columns does not include the outer row or column, which contains table formulas or input values. If the input cell is a deleted reference, the row of the input cell, given by the bytes at offset 8 and 9, is -1. TABLE2 37h 55d Record Type: TABLE2 Description: Describes a two-input table created by the Data Table command. It is the same as the TABLE record, except there is no distinction between a row input table and a column input table, there are two input cells rather than one, and either may have a value of -1, indicating a deleted reference. Record Body Length: 16 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 First row of the table 2-3 Last row of the table 4 First column of the table 5 Last column of the table 6 Recalculation flag Table is calculated 0 Needs recalculation nonzero 7 RESERVED - must be zero 0 8-9 Row of the row input cell 10-11 Column of the row input cell 12-13 Row of the column input cell 14-15 Column of the column input cell CONTINUE 3Ch 60d Record Type: CONTINUE Description: Continuation of FORMULA, ARRAY, or EXTERNNAME records that are too long to fit in a single record. Record Body Length: variable Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-on Parsed expression WINDOW1 3Dh 61d Record Type: WINDOW1 Description: Basic window information. Locations are relative to the upper left corner of the Microsoft Windows desktop, and are measured in units of 1/20th of a point. Record Body Length: 9 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Horizontal position of the window 2-3 Vertical position of the window 4-5 Width of the window 6-7 Height of the window 8 Hidden attribute Window is not hidden 0 Window is hidden 1 If you do not include a WINDOW1 record in your BIFF file, Excel will create a default window in your document. WINDOW2 3Eh 62d Record Type: WINDOW2 Description: Advanced window information. The WINDOW2 record is optional. If present, it must immediately follow the WINDOW1 record. Record Body Length: 14 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0 Display Formulas Display values 0 Display formulas 1 1 Display Grid Do not display gridlines 0 Display gridlines 1 2 Display Row and Column Headers Do not display headers 0 Display headers 3 Freeze window panes Do not freeze panes 0 Freeze panes 1 4 Display zero values Suppress display 0 Display zero values 1 5-6 Top row visible in the window 7-8 Leftmost column visible in the window 9 Row/column header and gridline color Specified in next four bytes 0 Use window's default 1 foreground color. 10-13 Row/column headers and gridline color (RGB) BACKUP 40h 64d Record Type: BACKUP Description: Specifies whether a BIFF file should be backed up Record Body Length: 2 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Backup flag Do not back up 0 Back up 1 PANE 41h 65d Record Type: PANE Description: Describes the number and position of unfrozen panes in a window. Panes are created by horizontal and vertical splits, which are measured in units of 1/20th of a point. Record Body Length: 9 bytes Record Body Byte Structure: Byte Number Byte Description Contents (hex) 0-1 Horizontal position of the split, zero if none 2-3 Vertical position of the split, zero if none 4-5 Top row visible in the bottom pane 6-7 Leftmost column visible in the right pane 8 Pane number of the active pane