Date: 2023-05-07
Updated: 2023-06-12
Author: Erik Leth Danielsen
Excel Binary File Format (.xls) Structure, BiffView
Excel Binary File Format (.xls) Structure, BiffView
Problem:
I have used Excel xls files for many years for sending Part List (BOM) to external PCBA delers.
The only possibility to generate XLS in .Net, was to controll Excel trugh
Microsoft.Office.Interop.Excel.Application.
I have always wanted a way to do it without having excel installed.
The benefit of the old Excel XLS format is that everyone can open it.
Info: The Newer format XLSX is just a zip file you can unzip it change it in notepad and zip it agen.
Test Software
Short:
I looked for a lib and found xlsLib see link. it's developed in c++ very complicated,
my head almost fell off :-), trying to figure out how it worked it took 14 days just to understand it a littel,
it could do everything except what i needed i want to insert images in my xls.
my first idea was to add the feature to xlsLib, but over time i found out it was way to complicated, Then i found BiffView see Link,
and started to understand how it worked, i made my own BiffView that also supports "Office 97-2007 Drawing DATA".
two BiffView examples see:
Test1.htm
Test2.htm
nyp447 210315.htm
The Excel Binary Structure:
1. The Workbook file Excel97-2007 Binary File Format
is split up into small parts called Biff Records
Type 16 bit (2 bytes) lsb byte first
Length 16 bit (2 bytes) lsb byte first
Two of the recoards Type (EBh) and (ECh) Contains MS Drawing Data
If excel can't load the file, be !!OBS on address
(85h)BOUNDSHEET //points to sheat (809h)BOF address
The Next 3 is optional.
(20Bh)INDEX //points to DBCELL address it also work without it
(D7h)DBCELL //points to Rows address it also work without it
(FFh)EXTSST //points to SST address it also work without it
2. Office 97-2007 Drawing DATA
Type 32 bit (4 bytes) lsb byte first
Length 32 bit (4 bytes) lsb byte first
3. Windows Compound Binary File Format
All the data is saven in a Hardisk file format with sectors, I used openmcdf to do this see Link.
as standard an xls containes 3 files the only one thats matters is the Workbook file
File1: Workbook
File2: chr(5) & SummaryInformation
File3: chr(5) & DocumentSummaryInformation
For more info see:
Excel97-2007BinaryFileFormat(xls)Specification.pdf
OfficeDrawing97-2007BinaryFormatSpecification.pdf
WindowsCompoundBinaryFileFormatSpecification.pdf
Download complete code:
I have made a BiffView tool, that also can generate xls with images
it requres Framework 2.0
Complete Code VB.Net
To Run it \MeldcoBiffView\bin\Release\MeldcoBiffView.exe
The program contains
1. BiffView, select xls file and it generates an htm file that shows the Biff Recoards.
2. Test1 XLS generates a small test xls file
3. Test2 XLS generates a test xls file contaning 3 images
To view code open \MeldcoBiffView.sln in .Net2010 or newer
Links:
xlsLib
openmcdf
BiffView by DIaLOGIKa