4.11 Shared String Table (BIFF8)
4.11.2 The EXTSST Record
The EXTSST record is used by Excel to create a string hash table, while loading the document. It contains stream 
positions of specific strings in the SST record. The SST record will be divided into several portions, which all contain 
the same number of strings. The first string in each portion will be referenced in the EXTSST record. It is not required to 
write an EXTSST record when exporting an Excel document.
The following example shows the absolute stream position in the first column and the relative record position 
(including the record headers) in the second column. The SST record is too long so that some of the strings are 
following in the CONTINUE record.
Abs. stream offset t Rel. rec. offset
Contents
Description
00020000
H
0000
H
00FC
H
SST identifier
00020002
H
0002
H
1000
H
Size of the SST record
00020004
H
0004
H
00000011
H
Total number of strings in the document
00020008
H
0008
H
00000011
H
Number of unique strings following
0002000C
H
000C
H
String 0 (total size = 0100
H
bytes)
0002010C
H
010C
H
String 1 (total size = 0200
H
bytes)
0002030C
H
030C
H
String 2 (total size = 0100
H
bytes)
00020800
H
0800
H
String 8 (total size = 0100
H
bytes)
00021004
H
0000
H
003C
H
CONTINUE identifier
00021006
H
0002
H
0320
H
Size of the CONTINUE record
00021008
H
0004
H
Continuation of string 14 (size = 0020
H
bytes)
00021028
H
0024
H
String 15 (total size = 0100
H
bytes)
00021128
H
0124
H
String 16 (total size = 0200
H
bytes)
00021328
H
0000
H
00FF
H
EXTSST identifier
0002132A
H
0002
H
001A
H
Size of the EXTSST record
0002132C
H
0004
H
0008
H
8 strings in each portion
0002132E
H
0006
H
0002000C
H
Absolute stream position of string 0
00021332
H
000A
H
000C
H
Relative record position of string 0 (in SST)
00021334
H
000C
H
0000
H
Not used
00021336
H
000E
H
00020800
H
Absolute stream position of string 8
0002133A
H
0012
H
0800
H
Relative record position of string 8 (in SST)
0002133C
H
0014
H
0000
H
Not used
0002133E
H
0016
H
00021128
H
Absolute stream position of string 16
00021342
H
001A
H
0124
H
Relative record position of string 16 (in CONTINUE)
00021344
H
001C
H
0000
H
Not used
111
To html - Convert PDF to html files in C#.net, ASP.NET MVC, WinForms, WPF application
How to Convert PDF to HTML Webpage with C# PDF Conversion SDK
change pdf to html; convert pdf into html file
To html - VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.net, ASP.NET MVC, WinForms, WPF application
PDF to HTML Webpage Converter SDK for VB.NET PDF to HTML Conversion
convert pdf to html code online; convert pdf into web page
4 Worksheet/Workbook Stream
4.12 Conditional Formatting Table (BIFF8)
Definition: Conditional Formatting Table
The settings of conditional formattings are stored for each sheet in the Conditional Formatting Table. It is 
contained in the Sheet Substream following the cell records (
4.2.5).
Structure of the Conditional Formatting Table, BIFF8:
●●
CFHEADER
5.15
●● CFRULE
5.16
Each CFHEADER record in this table with its following CFRULE records describes identical conditional formatting 
attributes for several cells in the worksheet.
4.13 Hyperlink Table (BIFF8)
Definition: Hyperlink Table
Hyperlinks are stored for each sheet in the Hyperlink Table. It is contained in the Sheet Substream following the 
cell records (
4.2.5).
Structure of the Hyperlink Table, BIFF8:
●●
HYPERLINK
5.58
QUICKTIP
5.83
Each HYPERLINK record in this table describes a hyperlink. The optional QUICKTIP record contains a tool tip that 
occurs when the mouse pointer is over the hyperlink cell.
4.14 Data Validity Table (BIFF8)
Definition: Data Validity Table
Data validity settings are stored for each sheet in the Data Validity Table. It is contained in the Sheet Substream 
following the cell records (
4.2.5).
Structure of the Data Validity Table, BIFF8:
DATAVALIDATIONS
5.27
●● DATAVALIDATION
5.26
A DATAVALIDATIONS record introduces the list of DATAVALIDATION records. The DATAVALIDATIONS record 
contains the number of DATAVALIDATION records. Each DATAVALIDATION record contains data validity settings 
for and the addresses of all affected cells.
112
Online Convert PDF to HTML5 files. Best free online PDF html
Download Free Trial. Convert a PDF file to HTML. Then just wait until the conversion from PDF to HTML is complete and download the file.
how to convert pdf into html; change pdf to html format
C# HTML5 Viewer: Deployment on DotNetNuke Site
adding pdf to html; convert pdf to html code for email
4.15 AutoFilter, Advanced Filter
4.15 AutoFilter, Advanced Filter
2do
4.16 Scenarios
2do
4.17 Web Queries (BIFF8)
2do
113
C# HTML5 Viewer: Deployment on AzureCloudService
Tutorial about Integrating C# .NET HTML5 Viewer to AzureCloudService Application.
converting pdf to html; pdf to web converter
DocImage SDK for .NET: HTML Viewer, View, Annotate, Convert, Print
.NET Document Imaging SDK, view, annotate, convert, process, and print Word, Excel, PowerPoint, PDF, TIFF, DICOM, BMP, JPEG, GIF, PNG, JPEG 2000 & JBIG2 in .NET
convert pdf to url online; changing pdf to html
4 Worksheet/Workbook Stream
4.18 Worksheet/Workbook Protection
An Excel document may contain different types of protection.
Definition: Worksheet/workbook protection
Worksheet/workbook protection protects specific contents of the worksheet or workbook, for instance window 
settings, cell contents, or objects.
Definition: File protection
File protection protects the file itself, either sets to read-only, or restricts read and write access. File protection 
does not care about the contents of the document. This type of protection is described in the next chapter 
(
4.19).
Not all records regarding protection must occur in the stream. If a record is omitted, the corresponding item is not active 
(for instance: omitting the OBJECTPROTECT record leaves objects unprotected). For the position of the mentioned 
records in the substreams see 
4.2.
4.18.1 Single Worksheet Protection (BIFF2-BIFF4)
Definition: Worksheet Protection Block
Several records in the Worksheet Protection Block determine the protected items in the sheet.
PROTECT protects the cell contents, WINDOWPROTECT protects the window settings, and OBJECTPROTECT 
protects the embedded objects. The PASSWORD record contains the hash value of the password (
4.18.4) used to 
protect the sheet. All the mentioned records occur always, if the file was written by Excel, but may be omitted.
If a protection password is set in the PASSWORD record, the read/write file protection (
4.19) will be enabled, which 
causes encryption of the file (
4.19.1) in every case. If this protection is not enabled manually while saving the file, the 
built-in password “VelvetSweatshop” is used, not the password set for worksheet protection.
Structure of the Worksheet Protection Block, BIFF2-BIFF4:
PROTECT
Cell contents: 1 = protected (
5.82)
WINDOWPROTECT
Window settings: 1 = protected (
5.111)
OBJECTPROTECT
Embedded objects: 1 = protected (
5.72)
PASSWORD
Hash value of the password; 0 = No password (
5.76)
4.18.2 Sheet Protection in a Workbook (BIFF5-BIFF8)
The PROTECT record in the Worksheet Protection Block indicates that the sheet is protected. There may follow a 
SCENPROTECT record or/and an OBJECTPROTECT record. The optional PASSWORD record contains the hash 
value of the password used to protect the sheet (
4.18.4). In BIFF8, there may occur additional records following the 
cell records in the Sheet Substream (
4.2.5).
Sheet protection with password does not cause to switch on read/write file protection. Therefore the file will not be 
encrypted.
Structure of the Worksheet Protection Block, BIFF5-BIFF8:
PROTECT
Worksheet contents: 1 = protected (
5.82)
OBJECTPROTECT
Embedded objects: 1 = protected (
5.72)
SCENPROTECT
Scenarios: 1 = protected (
5.91)
PASSWORD
Hash value of the password; 0 = no password (
5.76)
114
C# powerpoint - Convert PowerPoint to HTML in C#.NET
C# PowerPoint - Convert PowerPoint to HTML in C#.NET. How to Convert PowerPoint to HTML Webpage with C# PowerPoint Conversion SDK.
how to add pdf to website; convert pdf to html with
C# Word - Convert Word to HTML in C#.NET
C# Word - Convert Word to HTML in C#.NET. How to Convert Word to HTML Webpage with C# Word Conversion SDK. Word to HTML Conversion Overview.
convert pdf form to html form; convert pdf into html online
4.18 Worksheet/Workbook Protection
4.18.3 Workbook Protection (BIFF5-BIFF8)
Definition: Workbook Protection Block
The Workbook Protection Block in the Workbook Globals Substream determines the protected items in the entire 
workbook.
The PROTECT record protects the workbook contents and the WINDOWPROTECT record protects the window 
settings. The PASSWORD record contains the hash value of the password used to protect the workbook (
4.18.4). All 
the mentioned records occur always, if the file was written by Excel, but may be omitted.
If a protection password is set in the PASSWORD record, the read/write file protection (
4.19) will be enabled, which 
causes encryption of the file (
4.19.1) in every case. If this protection is not enabled manually while saving the file, the 
built-in password “VelvetSweatshop” is used, not the password set for workbook protection.
Structure of the Workbook Protection Block:
○ WINDOWPROTECT
Window settings: 1 = protected (
5.111)
○ PROTECT
Workbook contents: 1 = protected (
5.82)
○ PASSWORD
Hash value of the password; 0 = no password (
5.76)
○ PROT4REV
Shared workbook: 1 = protected
○ PROT4REVPASS
Hash value of the shared password; 0 = no password
4.18.4 Password Hash Value
In several records the hash value of a password is stored, used for later verification of an entered password. The length of 
the password is restricted to 15 characters.
The following pseudo-code algorithm shows how to create such a hash value from a given byte-string password:
ALGORITHM Get_Password_Hash( password )
1) hash ← 0 ; char_index ← char_count ← character count of password
2) char_index ← char_index - 1
3) char ← character from password with index char_index x {0 is leftmost character}
4) hash ← hash XOR char
5) rotate the lower 15 bits of hash left by 1 bit
6) IF char_index > 0 THEN JUMP 2)
7) RETURN hash XOR char_count XOR CE4B
H
115
C# WinForms Viewer: Load, View, Convert, Annotate and Edit Excel
software. Powerful conversion function help users to freely implement conversion from Excel document to PDF, Tiff and HTML file.
converter pdf to html; convert pdf to html
C# WPF Viewer: Load, View, Convert, Annotate and Edit Excel
easily. Besides, powerful conversion function will help users to freely convert Excel document to PDF, Tiff and HTML file. Annotations
convert fillable pdf to html; convert pdf to website html
4 Worksheet/Workbook Stream
Example: The password is “abcdefghij” (10 characters).
Step
char_index
char (step 3)
hash (step 4)
hash (step 5)
1)
10
0000
H
2) - 5)
9
6A
H
('j')
006A
H
00D4
H
2) - 5)
8
69
H
('i')
00BD
H
017A
H
2) - 5)
7
68
H
('h')
0112
H
0224
H
2) - 5)
6
67
H
('g')
0243
H
0486
H
2) - 5)
5
66
H
('f')
04E0
H
09C0
H
2) - 5)
4
65
H
('e')
09A5
H
134A
H
2) - 5)
3
64
H
('d')
132E
H
265C
H
2) - 5)
2
63
H
('c')
263F
H
4C7E
H
2) - 5)
1
62
H
('b')
4C1C
H
1839
H
2) - 5)
0
61
H
('a')
1858
H
30B0
H
7)
FEF1
H
116
4.19 File Protection
4.19 File Protection
A file might be protected with a password against modifying (write protection), or against opening at all (read/write 
protection). These passwords are set in the Save-As dialogue of Excel.
Write protection (BIFF3-BIFF8): The WRITEPROT record marks the file to be protected against modifying. The 
password to unprotect the file is stored in the FILESHARING record. Write protection does not cause to encrypt the 
file.
Read/write protection (BIFF2-BIFF8): A FILEPASS record occurs containing stream encryption information, which 
includes the encrypted password. All following records are encrypted (
4.19.1).
Definition: File Protection Block
The records of the File Protection Block describe the file protection and are the first records in a file (
4.2).
Structure of the File Protection Block:
○ WRITEPROT
File is write protected (BIFF3-BIFF8, 
5.113), password in 
FILESHARING
○ FILEPASS
File is read/write-protected, encryption information (
5.43)
○ WRITEACCESS
User name (BIFF3-BIFF8, 
5.112)
○ FILESHARING
File sharing options (BIFF3-BIFF8, 
5.44)
4.19.1 BIFF2-BIFF5 XOR Stream Encryption
Encryption takes place for the contents of a record. The record header (record identifier and size) is not encrypted. There 
are a few records or data fields that are never encrypted either:
The entire BOF record (
5.8)
The entire INTERFACEHDR record
The stream position field in the SHEET record (
5.95)
Stream encryption takes place in several steps:
4) get the password from the user
5) create hash value (16-bit, 
4.18.4) and encryption key (16-bit, see below) from the password
6) store hash value and encryption key in FILEPASS record (
5.43)
7) create the 128-bit sized key sequence from password and encryption key (see below)
8) encrypt all following records using the key sequence (see below)
Stream decryption works similar to encryption:
9) get the password from the user
10) create hash value (16-bit, 
4.18.4) and encryption key (16-bit, see below) from the password
11) compare with values contained in FILEPASS record
12) if password is correct, create the 128-bit sized key sequence from password and encryption key (see below)
13) decrypt all following records using the key sequence (see below)
117
4 Worksheet/Workbook Stream
BIFF2-BIFF5 Encryption Key
The 16-bit encryption key is used for the BIFF2-BIFF5 XOR stream encryption algorithm (
4.19.1). It is calculated 
from the password. The FILEPASS record stores this key and the hash value (
4.18.4) of the password (the hash value 
is not used to encrypt the data). The length of the password is restricted to 15 characters.
The following pseudo-code algorithm shows how to create the encryption key from a given byte-string password:
ALGORITHM Get_Encryption_Key_XOR( password )
1) key ← 0 ; key_base ← 8000
H
; key_final ← FFFF
H
; char_index ← 0
2) char_count ← character count of password
3) char ← character from password with index char_index {right-to-left, 0 is rightmost}
4) char ← char AND 7F
H
{use only the lower 7 bits of each character}
5) bit_index ← 0
6) rotate the lower 16 bits of key_base left by 1 bit
7) IF (least significant bit of key_base) = 1 THEN key_base ← key_base XOR 1020
H
8) rotate the lower 16 bits of key_final left by 1 bit
9) IF (least significant bit of key_final) = 1 THEN key_final ← key_final XOR 1020
H
10) IF (bit with index bit_index in char) = 1 THEN key ← key XOR key_base
11) bit_index ← bit_index + 1
12) IF bit_index < 8 THEN JUMP 6)
13) char_index ← char_index + 1
14) IF char_index < char_count THEN JUMP 3)
15) RETURN key XOR key_final
BIFF2-BIFF5 Encryption Key Sequence
The encryption sequence is needed to encrypt or decrypt the record contents. It is generated from the password and the 
encryption key (which is generated from the password too, see above). The size of the encryption key sequence is always 
128 bit.
The following pseudo-code algorithm shows how to create the encryption key from a given byte-string password (and the 
encryption key “key”):
ALGORITHM Get_Key_Sequence_XOR( password, key )
1) char_count ← character count of password
2) create a sequence key_seq[] containing 16 bytes
3) fill the first char_count bytes of key_seq[] with all characters of password
4) fill the remaining (16 – char_count) bytes of key_seq[] with the first bytes of the sequence
{ BB
H
,FF
H
,FF
H
,BA
H
,FF
H
,FF
H
,B9
H
,80
H
,00
H
,BE
H
,0F
H
,00
H
,BF
H
,0F
H
,00
H
}
5) key_lower ← lower 8 bits of key ; key_upper ← upper 8 bits of key
6) seq_index ← 0
7) key_seq[seq_index] ← key_seq[seq_index] XOR key_lower
8) key_seq[seq_index + 1] ← key_seq[seq_index + 1] XOR key_upper
9) seq_index ← seq_index + 2
10) IF seq_index < 16 THEN JUMP 7)
11) rotate all bytes of key_seq left by 2 bits
12) RETURN key_seq[]
118
4.19 File Protection
BIFF2-BIFF5 Stream Encryption
To encrypt record data, a 128-bit sized key sequence is used, which has been generated from a password before (see 
above). All stream data is encrypted in blocks of 16 bytes using the key sequence. In every data block, each byte is 
encoded using the corresponding byte of the key sequence. The offset pointer into the key sequence is reinitialised 
whenever a new record is started. The initial value of this offset is dependent on the stream position and size of the new 
record (it does not simply restart at 0). For details see the following algorithm.
The following pseudo-code algorithm shows how to encrypt the data of an entire record (assuming that stream points to 
the start of the record data):
ALGORITHM Write_Record_XOR( stream, record_data[], record_size, key_seq[] 
)
1) key_index ← ((position of stream) + record_size) AND 0F
H
2) record_index ← 0
3) IF record_index = record_size THEN RETURN
4) data_byte = record_data[record_index] XOR key_seq[key_index]
5) rotate all 8 bits of data_byte right by 3 bits
6) write data_byte to stream
7) key_index ← (key_index + 1) AND 0F
H
{rotate inside key_seq[]}
8) record_index ← record_index + 1
9) JUMP 3)
BIFF2-BIFF5 Stream Decryption
To decrypt record data, a 128-bit sized key sequence is used, which has been generated from a password before (see 
above). Decryption works similar to encryption (see above), but in reversed order of operations.
The following pseudo-code algorithm shows how to decrypt the data of an entire record (assuming that stream points to 
the start of the record data):
ALGORITHM Read_Record_XOR( stream, record_size, key_seq[] )
1) key_index ← ((position of stream) + record_size) AND 0F
H
2) create a sequence record_data[] containing record_size bytes
3) record_index ← 0
4) IF record_index = record_size THEN RETURN record_data[]
5) data_byte ← read 1 byte from stream
6) rotate all 8 bits of data_byte left by 3 bits
7) record_data[record_index] ← data_byte XOR key_seq[key_index]
8) key_index ← (key_index + 1) AND 0F
H
{rotate inside key_seq[]}
9) record_index ← record_index + 1
10) JUMP 4)
119
5 Worksheet/Workbook Records
5
Worksheet/Workbook Records
The filled dot “●” means, that Excel supports the record on import and export. The unfilled dot “○” means, that Excel 
can read the record, but does not write it anymore in the respective BIFF version. An empty field denotes that the record 
is not supported, or that the identifier has been changed in this BIFF version.
5.1 Overview, Ordered by Record Identifier
Record ID
Record name
Occurs in BIFF versions
2
3
4
5
8
0000
H
DIMENSION
0001
H
BLANK
0002
H
INTEGER
0003
H
NUMBER
0004
H
LABEL
0005
H
BOOLERR
0006
H
FORMULA
0007
H
STRING
0008
H
ROW
0009
H
BOF
000A
H
EOF
000B
H
INDEX
000C
H
CALCCOUNT
000D
H
CALCMODE
000E
H
PRECISION
000F
H
REFMODE
0010
H
DELTA
0011
H
ITERATION
0012
H
PROTECT
0013
H
PASSWORD
0014
H
HEADER
0015
H
FOOTER
0016
H
EXTERNCOUNT
0017
H
EXTERNSHEET
0018
H
DEFINEDNAME
120
Documents you may be interested
Documents you may be interested