Allgemeines über das Excel-Dateiformat
Das Wichtigste kurz zusammengefasst
Das Excel-Dateiformat BIFF
Die
BIFF-Versionen
Merkmale
des BIFF-Formates
Die verschiedenen Storages und
Streams
Die Storages
Die Streams
BIFF-Dump mit Storages und Streams
Die Recordtypen des
Workbook/Book-Streams
Recordtypen in
BIFF8/BIFF8X
Neue
Recordtypen in BIFF8/BIFF8X
Entfernte
Recordtypen in BIFF8/BIFF8X
Ein paar interessante Recordtypen
Die Art und Weise der Informationsspeicherung
OLE Structured Storage-Dateien und
VBA
Dateizugriff
mit VBA
Öffnen einer OLE Structured
Storage-Datei
Prüfen, ob eine
Datei das OLE Structured Storage-Format besitzt
Welche Dokumentationen existieren zu
BIFF?
Microsoft Excel 97 Developer's Kit
OpenOffice.org
Documentation of the Microsoft Excel File Format
Microsoft Excel 97 SDK BIFF Viewer
Artikel in der Microsoft Knowledge-Base
Links zu weiteren Informationsquellen
Dokumentation zum BIFF Viewer von Microsoft
Allgemeines über das Excel-Dateiformat
Microsoft Excel verwendet für Arbeitsmappen, Vorlagen, Add-Ins und Sicherungsdateien ein Dateiformat namens BIFF (Binary Interchange File Format), wobei seit Microsoft Excel Version 97 das Format BIFF8 verwendet wird. Excel 2000 besitzt nur minimale Erweiterungen gegenüber BIFF8 von Excel 97, die kaum erwähnenswert sind. Excel 2002 dagegen führte ein paar neue Recordtypen ein, die zwar die Dateikompatibilität nicht beeinträchtigen, aber insbesondere dann genauer betrachtet werden sollten, wenn eine Mappe mit Excel 2002 erstellt und anschliessend in Excel 97 benutzt wird.
Das Wichtigste kurz zusammengefasst
Für alle die es eilig haben und die vorliegende Seite nicht vollständig durchlesen möchten, hier eine kurze Zusammenfassung der wichtigsten Punkte:
BIFF ist die Abkürzung von Binary Interchange File Format.
Die Ziffer 8 in BIFF8 steht für die Nummer der BIFF-Version, also
Version 8.
Microsoft Excel 97, 2000, 2002/XP und 2003 sowie die Macintosh Excel-Versionen 98, 2001,
v.X und 2004 verwenden alle das gleiche Dateiformat, nämlich BIFF8. Da
in Microsoft Excel 2002/XP und 2003 ein paar neue Recordtypen eingeführt wurden, wird das
BIFF-Format dieser Excel-Versionen in Fachkreisen BIFF8X genannt.
Arbeitsmappen der oben erwähnten Excel-Versionen sind untereinander grundsätzlich
kompatibel - sowohl vorwärts als auch rückwärts. Das bedeutet, dass beispielsweise eine
Excel 2002-Mappe mit Excel 97 und eine Excel 2000-Mappe mit Excel 2003 geöffnet werden
kann.
Microsoft Pocket Excel 1.0 und 2.0 verwendet ebenfalls das Dateiformat BIFF, allerdings
eine abgespeckte Version.
Excel 2000-Dateien besitzen gegenüber Excel 97-Dateien nur kleine Erweiterungen
bezüglich Dateiformat. Es wurden dabei keine neuen Recordtypen eingeführt.
Excel 2002- und Excel 2003-Dateien besitzen gegenüber Excel 2000- bzw. Excel 97-Dateien
ebenfalls ein paar kleinere Neuerungen. Excel 2002- bzw. Excel 2003-Dateien verwenden dazu
neue, zusätzliche Recordtypen, damit die Daten der in Excel 2002/2003 neu eingeführten
Funktionen/Features gespeichert werden können. Beispielsweise verwendet der Schutz von
Zellbereichen den neuen Recordtyp namens RANGEPROTECTION.
Da
die neuen Features von Excel 2002 separate, neu eingeführte Recordtypen verwenden, lassen
sich Excel 2002- bzw. Excel 2003-Dateien praktisch problemlos in Excel 97 und Excel 2000
öffnen und bearbeiten.
Weitere Informationen zum Thema Dateikompatibilität erhalten Sie hier:
Alle Microsoft Office-Programme, ausser Microsoft Access, speichern ihre Daten in Structured Storage-Dateien. Viele Informationen kann man aus diesen strukturiert formatierten Dateien auslesen, unabhängig davon, ob es sich um eine xls-, eine doc- oder eine ppt-Datei handelt. So lassen sich beispielsweise die Dokument-Eigenschaften der Datei (Document Properties) abfragen und auch ändern.
HOWTO: Read Compound Document Properties Directly
with VC++
http://support.microsoft.com/default.aspx?scid=kb;EN-US;186898
FILE: DSOFILE.EXE Lets You Read
Document Properties w/o Office
http://support.microsoft.com/default.aspx?scid=kb;EN-US;224351
Wie man mit VBA/VB feststellen kann, ob eine Datei das
Structured Storage Format besitzt, wird hier gezeigt:
Prüfen,
ob eine Datei das OLE Structured Storage Format besitzt
Wie einleitend bereits erwähnt wurde, verwenden die Excel-Versionen für Windows ab Microsoft Excel 97 das Dateiformat BIFF8. Die Abkürzung BIFF steht für Binary Interchange File Format, und die Ziffer 8 für die BIFF-Version 8. Es existieren sechs verschiedene BIFF-Versionen: BIFF2, BIFF3, BIFF4, BIFF5, BIFF7 und BIFF8. Das BIFF-Dateiformat existiert bereits seit vielen Jahren. Es wurde mit der Excel-Version 2.0 bzw. 2.1 eingeführt, die im Jahre 1987 veröffentlicht wurde. Die BIFF-Versionen korrespondieren mehrheitlich mit den existierenden Excel-Versionen:
| BIFF-Version* | Excel-Version |
| BIFF2 | Excel 2.1 |
| BIFF3 | Excel 3.0 |
| BIFF4 | Excel 4.0 |
| BIFF5 | Excel 5.0 |
| BIFF7 | Excel 95 (Excel 7.0) |
| BIFF8 | Excel 97, 2000, 2002/XP, 2003 |
* Anmerkung
Die BIFF-Versionen BIFF2 und BIFF6 existieren nicht, da es nie eine Microsoft
Excel-Version 1.0 für Windows gegeben hat. Infolge einer Versionsnummer-Angleichung mit
den anderen Microsoft Office-Programmen wie Word und PowerPoint wurde die Excel-Version
6.0 ausgelassen.
Bis
und mit Excel Version 4 wurden BIFF-Dateien (BIFF2, BIFF3, BIFF4) als Stream
gespeichert. Das heisst, dass alle Records sequentiell abgelegt sind. Seit Excel Version
5.0 speichert BIFF (BIFF5, BIFF7, BIFF8) alle Daten im sogenannten "OLE2 Storage
Format" (oft auch als "Structured Storage" bezeichnet). Das
OLE2 Storage Format - eine Datei, die dieses Format verwendet, wird vielfach "OLE2
Compound File" genannt - enthält mehrere Streams für die unterschiedlichen
Datentypen.
Seit BIFF5 wird das sogenannte "OLE Structured Storage Format" benutzt.
Neben der Bezeichnung OLE Structured Storage wird häufig auch "OLE2 Storage"
oder "XLStorage" verwendet. Die Versionen BIFF2 bis BIFF4 waren rein
streambasiert, während ab BIFF5 nebst Streams auch Storages verwendet werden.
Eine als OLE Structured Storage gespeicherte BIFF-Datei (d.h. BIFF5 bis BIFF8) enthält
verschiedene Storages und Streams. Eine Datei im BIFF2-, BIFF3- oder
BIFF4-Format enthält nie Storages sondern ausschliesslich Streams bzw. nur einen einzigen
Stream.
Ein
Stream einer Excel-Arbeitsmappendatei (xls) ist beispielsweise der Stream für die Daten
der Arbeitsmappe. Dieser Stream wird bei BIFF5 und BIFF7 als Book bezeichnet. Bei
BIFF8 heisst der Stream Workbook.
Ein
Stream ist zwischen 0 und n Bytes lang. Ein Storage besitzt generell eine Datenlänge von
0 Bytes.
Ein
OLE2 Storage-File kann man mit einem Verzeichnis auf einer Festplatte vergleichen. Das
Verzeichnis kann sowohl Dateien als auch weitere Verzeichnisse (Unterverzeichnisse)
enthalten. Die Dateien stellen dabei Streams und die Verzeichnisse Storages dar. Jedes
Unterverzeichnis kann ebenfalls Dateien und Verzeichnisse enthalten.
Die
meisten Streams enthalten Daten, die in Form von Records abgelegt sind.
Die verschiedenen Storages und Streams
In einer BIFF-Datei, sprich gewöhnlich einer Excel-Arbeitsmappendatei, sind in der Regel mehrere Storages und Streams enthalten. Wenn man in Microsoft Excel 97 oder neuer (bzw. Excel 98 oder neuer für Macintosh) eine neue, leere Arbeitsmappe anlegt und dann speichert, so besitzt die dadurch erstellte xls-Datei lediglich drei Streams: Workbook-Stream, SummaryInformation-Stream und DocumentSummaryInformation-Stream.
Welcher Stream bzw. Storage in welchem anderen Storage vorkommt, ist am besten anhand eines BIFF-Dumps zu erkennen (siehe weiter unten).
Ich habe mehrere Exceldateien untersucht und dabei die in den nachfolgenden Abschnitten vorgestellten Storages und Streams angetroffen.
Die nachfolgende Tabelle enthält eine Auflistung der Storages (nicht abschliessend):
| Storage Name | Beschreibung | Bemerkung |
| _SX_DB_CUR | Pivot Cache | - |
| _VBA_PROJECT_CUR | Visual Basic Projekt | Der Storage "_VBA_PROJECT_CUR" für das Visual Basic Projekt besitzt anscheinend immer die Grösse von 0 Bytes. |
| VBA | VBA | Der Storage "VBA" besitzt anscheinend immer die Grösse von 0 Bytes. |
| <UserForm> | VBA UserForm | Für "<UserForm>" steht jeweils der Name (Codename) des Benutzerformulares. |
| MBD<X> | Embedded Object | Dieser Storage enthält ein eingebettetes Dokument (MBD=Embedded). |
| ObjectPool | Object | Dieser Storage befindet sich im Storage "MBD<X>". |
| LNK<X> | Linked Object | Der Storage "LNK<X>" enthält ein verknüpftes Dokument (LNK=Link). |
| Macros | - | Nur in Word-Dokumenten vorhanden. |
Anmerkung
Die Software "BIFF-Workbench" enthält eine Liste mit bekannten Storages.
Diese Liste zeigt die Streams (nicht abschliessend):
| Stream Name | Beschreibung | Bemerkung |
| Workbook | BIFF8 workbook stream | Enthält die Daten der Arbeitsmappe und aller Arbeitsblätter einer Excel 97-, Excel 2000-, Excel 2002- oder Excel 2003-Mappe. |
| Book | BIFF5/BIFF7 workbook stream | Enthält die Daten der Arbeitsmappe und aller Arbeitsblätter einer Excel 5.0- oder Excel 95 (7.0)-Mappe. |
| <DieseArbeitsmappe> | Workbook object | Für "<DieseArbeitsmappe>" steht der Name (Codename) der Arbeitsmappe. |
| <Blatt> | Worksheet object | Für "<Blatt>" steht der Name (Codename) des jeweiligen Arbeitsblattes. |
| SummaryInformation | Document settings | Enthält Dokument-Eigenschaften, u.a. die Dokument-Vorschaugrafik. Das erste Zeichen des Streamnamens besitzt den ASCII-Code 5. |
| DocumentSummaryInformation | Document settings | Enthält Dokument-Eigenschaften, u.a. die benutzerdefinierten Eigenschaften (Custom Properties). Das erste Zeichen des Streamnamens besitzt den ASCII-Code 5. |
| User Names | User names in shared workbooks | Enthält die Benutzernamen (nur bei einer freigegebenen Arbeitsmappe). Wird die Freigabe bei einer Mappe aufgehoben, so wird dieser Stream vollständig entfernt. |
| Revision Log | Change tracking log stream | Enthält das Änderungsprotokoll (nur bei einer freigegebenen Arbeitsmappe). Wird die Freigabe bei einer Mappe aufgehoben, so bleibt dieser Stream in der Datei bestehen und besitzt dann eine Länge von 390 Bytes! |
| Ctls | Controls | Dieser Stream enthält die in einem Arbeitsblatt eingebetteten Formular- und Toolbox-Steuerelemente. Nach dem Löschen sämtlicher eingebetteten Steuerelemente existiert der Stream weiterhin, besitzt jedoch eine Länge von 0 Bytes. |
| CompObj | Compound Object oder Composite Object (?) | Dieser Stream kann im Root der Datei vorkommen. Wenn ein VBA-Projekt mit einer UserForm existiert, so kommt der Stream in jedem Fall im UserForm-Storage vor (pro UserForm-Storage genau ein Mal). Das erste Zeichen des Streamnamens besitzt den ASCII-Code 3. |
| XCB | Excel Command Bar | Enthält die Daten einer benutzerdefinierten Symbolleiste, die der Exceldatei angefügt ist. Dieser Stream kommt vor dem Workbook-Stream. |
| _VBA_PROJECT | VBA Project | Stream im Storage "VBA". Dieser Stream "_VBA_PROJECT" ist nicht zu verwechseln mit dem Storage "_VBA_PROJECT_CUR". |
| PROJECT | - | Stream im Storage "_VBA_PROJECT_CUR". |
| PROJECTlk | - | Stream im Storage "_VBA_PROJECT_CUR". |
| PROJECTwm | - | Stream im Storage "_VBA_PROJECT_CUR". |
| f | - | Stream in einem UserForm-Storage. Pro UserForm-Storage kommt dieser Stream nur ein Mal vor. |
| o | - | Stream in einem UserForm-Storage. Pro UserForm-Storage kommt dieser Stream nur ein Mal vor. |
| VBFrame | - | Stream in einem UserForm-Storage. Pro UserForm-Storage kommt dieser Stream nur ein Mal vor. Das erste Zeichen des Streamnamens besitzt den ASCII-Code 3. |
| dir | - | Der "dir"-Stream enthält wahrscheinlich eine Liste der im VBA-Projekt existierenden Komponenten wie "DieseArbeitsmappe", Arbeitsblätter, Benutzerformulare, Module und Klassenmodule. "dir" ist vermutlich die Abkürzung von Directory. |
| __SRP_<X> | Beispiel: "__SRP_7" | Diese Streams enthalten vermutlich kompilierten Programmcode. Der Platzhalter "<X>" enthält einen für diesen Stream-Typ fortlaufenden Hex-Wert, beginnend bei 0 (d.h. 0-F, 10-1F, 20-2F, ...). |
| Data | - | (Unbekannt) |
| 1Table | - | Nur in Word-Dokumenten vorhanden. |
| ObjInfo | - | Das erste Zeichen des Streamnamens besitzt den ASCII-Code 3. |
| WordDocument | - | Nur in Word-Dokumenten vorhanden. |
BIFF-Dump mit Storages und Streams
Die blauen Einträge sind Storages.
XLStorage File
'CompObj', Type: Stream, Size: 104
'Workbook', Type: Excel Workbook, Size: 6566
'_VBA_PROJECT_CUR', Type: Storage, Size: 0
'VBA', Type: Storage, Size: 0
'dir', Type: Stream, Size: 898
'__SRP_0', Type: Stream, Size: 2032
'__SRP_1', Type: Stream, Size: 154
'__SRP_2', Type: Stream, Size: 398
'__SRP_3', Type: Stream, Size: 101
'__SRP_4', Type: Stream, Size: 218
'__SRP_5', Type: Stream, Size: 64
'Tabelle1', Type: Stream, Size: 1238
'Tabelle2', Type: Stream, Size: 1238
'Tabelle3', Type: Stream, Size: 1238
'UserForm1', Type: Stream, Size: 1432
'_VBA_PROJECT', Type: Stream, Size: 3782
'DieseArbeitsmappe', Type: Stream, Size: 1865
'PROJECT', Type: Stream, Size: 633
'PROJECTlk', Type: Stream, Size: 30
'PROJECTwm', Type: Stream, Size: 167
'UserForm1', Type: Storage, Size: 0
'f', Type: Stream, Size: 170
'o', Type: Stream, Size: 378
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 291
'SummaryInformation', Type: Stream, Size: 220
'DocumentSummaryInformation', Type: Stream, Size: 440
Der wohl beste Weg, das BIFF-Dateiformat kennen zu lernen, führt über das Studium von so genannten BIFF-Dumps. Mit dem Microsoft Utility BIFF-Viewer können Sie auf sehr einfache Art und Weise von jeder beliebigen Arbeitsmappendatei einen BIFF-Dump erstellen. Wenn der vom BIFF-Viewer generierte Dump nicht zu gross ist, kann er sogar am Bildschirm betrachtet werden. Mehr zu diesem Utility erfahren Sie unter Microsoft Excel 97 SDK BIFF Viewer.
Muster einer Excel-Arbeitsmappe mit einem Tabellenblatt (ohne VBA-Projekt)
XLStorage file C:\EINEMAPPE.XLS
'Workbook', Type: Excel Workbook, Size: 4096
'SummaryInformation', Type: Stream, Size: 4096
'DocumentSummaryInformation', Type: Stream, Size: 4096
Muster einer Excel-Arbeitsmappe mit einem Tabellenblatt (mit VBA-Projekt)
XLStorage file C:\EINEMAPPE.XLS
'CompObj', Type: Stream, Size: 104
'Workbook', Type: Excel Workbook, Size: 2754
'_VBA_PROJECT_CUR', Type: Storage, Size: 0
'VBA', Type: Storage, Size: 0
'dir', Type: Stream, Size: 652
'Tabelle1', Type: Stream, Size: 1011
'_VBA_PROJECT', Type: Stream, Size: 2756
'DieseArbeitsmappe', Type: Stream, Size: 1022
'PROJECT', Type: Stream, Size: 399
'PROJECTwm', Type: Stream, Size: 83
'SummaryInformation', Type: Stream, Size: 220
'DocumentSummaryInformation', Type: Stream, Size: 416
Muster eines grossen VBA-Projektes in einer Excel-Arbeitsmappe
'_VBA_PROJECT_CUR', Type: Storage, Size: 0
'VBA', Type: Storage, Size: 0
'dir', Type: Stream, Size: 2508
'Modul1', Type: Stream, Size: 1563
'X_Tests', Type: Stream, Size: 9129
'Z_Modul', Type: Stream, Size: 2587
'__SRP_0', Type: Stream, Size: 16511
'__SRP_1', Type: Stream, Size: 1582
'__SRP_2', Type: Stream, Size: 8406
'__SRP_3', Type: Stream, Size: 402
'__SRP_4', Type: Stream, Size: 2634
'__SRP_5', Type: Stream, Size: 647
'__SRP_6', Type: Stream, Size: 654
'__SRP_7', Type: Stream, Size: 101
'__SRP_8', Type: Stream, Size: 10992
'__SRP_9', Type: Stream, Size: 372
'__SRP_a', Type: Stream, Size: 1198
'__SRP_b', Type: Stream, Size: 587
'__SRP_c', Type: Stream, Size: 7200
'__SRP_d', Type: Stream, Size: 878
'__SRP_e', Type: Stream, Size: 3684
'__SRP_f', Type: Stream, Size: 629
'Tabelle2', Type: Stream, Size: 1302
'__SRP_10', Type: Stream, Size: 74
'__SRP_11', Type: Stream, Size: 162
'__SRP_12', Type: Stream, Size: 218
'__SRP_13', Type: Stream, Size: 64
'__SRP_14', Type: Stream, Size: 2362
'__SRP_15', Type: Stream, Size: 1267
'__SRP_16', Type: Stream, Size: 5000
'__SRP_17', Type: Stream, Size: 562
'basSystem', Type: Stream, Size: 18940
'frmFilter', Type: Stream, Size: 1817
'frmPrämie', Type: Stream, Size: 5247
'Tabelle13', Type: Stream, Size: 1303
'Tabelle22', Type: Stream, Size: 1303
'basHostCIF', Type: Stream, Size: 21386
'basHostHDA', Type: Stream, Size: 13258
'basSupport', Type: Stream, Size: 35593
'frmDesktop', Type: Stream, Size: 10519
'basHostBUSY', Type: Stream, Size: 68908
'frmOptionen', Type: Stream, Size: 19688
'frmStatistik', Type: Stream, Size: 5932
'frmUnterhalt', Type: Stream, Size: 9290
'_VBA_PROJECT', Type: Stream, Size: 26970
'basProzeduren', Type: Stream, Size: 63904
'basHostDTAZASY', Type: Stream, Size: 23366
'basHostVarious', Type: Stream, Size: 4884
'basSymbolleiste', Type: Stream, Size: 34118
'frmPostenauszug', Type: Stream, Size: 20561
'frmSplashscreen', Type: Stream, Size: 2473
'basDeklarationen', Type: Stream, Size: 7319
'frmAuftragSuchen', Type: Stream, Size: 26400
'frmAuftragÖffnen', Type: Stream, Size: 28910
'frmSaldonachweis', Type: Stream, Size: 7482
'frmUmsatzdetails', Type: Stream, Size: 43453
'DieseArbeitsmappe', Type: Stream, Size: 24494
'frmBuchungsanzeige', Type: Stream, Size: 49799
'frmBuchungsanzeigePrämieOLD', Type: Stream, Size: 1972
'PROJECT', Type: Stream, Size: 2615
'frmFilter', Type: Storage, Size: 0
'f', Type: Stream, Size: 179
'o', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 289
'frmPrämie', Type: Storage, Size: 0
'f', Type: Stream, Size: 1227
'o', Type: Stream, Size: 1730
'i10', Type: Storage, Size: 0
'f', Type: Stream, Size: 77
'o', Type: Stream, Size: 0
'CompObj', Type: Stream, Size: 112
'i31', Type: Storage, Size: 0
'f', Type: Stream, Size: 345
'o', Type: Stream, Size: 308
'CompObj', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 300
'PROJECTlk', Type: Stream, Size: 102
'PROJECTwm', Type: Stream, Size: 1256
'frmDesktop', Type: Storage, Size: 0
'f', Type: Stream, Size: 2855
'o', Type: Stream, Size: 3960
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 309
'frmOptionen', Type: Storage, Size: 0
'f', Type: Stream, Size: 299
'o', Type: Stream, Size: 184
'i30', Type: Storage, Size: 0
'f', Type: Stream, Size: 336
'o', Type: Stream, Size: 440
'x', Type: Stream, Size: 96
'i32', Type: Storage, Size: 0
'f', Type: Stream, Size: 400
'o', Type: Stream, Size: 712
'CompObj', Type: Stream, Size: 110
'i33', Type: Storage, Size: 0
'f', Type: Stream, Size: 696
'o', Type: Stream, Size: 808
'CompObj', Type: Stream, Size: 110
'i38', Type: Storage, Size: 0
'f', Type: Stream, Size: 300
'o', Type: Stream, Size: 448
'CompObj', Type: Stream, Size: 110
'i39', Type: Storage, Size: 0
'f', Type: Stream, Size: 292
'o', Type: Stream, Size: 544
'CompObj', Type: Stream, Size: 110
'i49', Type: Storage, Size: 0
'f', Type: Stream, Size: 404
'o', Type: Stream, Size: 728
'CompObj', Type: Stream, Size: 110
'i67', Type: Storage, Size: 0
'f', Type: Stream, Size: 272
'o', Type: Stream, Size: 460
'CompObj', Type: Stream, Size: 110
'CompObj', Type: Stream, Size: 115
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 363
'frmStatistik', Type: Storage, Size: 0
'f', Type: Stream, Size: 1647
'o', Type: Stream, Size: 1880
'i21', Type: Storage, Size: 0
'f', Type: Stream, Size: 77
'o', Type: Stream, Size: 0
'CompObj', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 376
'frmUnterhalt', Type: Storage, Size: 0
'f', Type: Stream, Size: 187
'o', Type: Stream, Size: 60
'i23', Type: Storage, Size: 0
'f', Type: Stream, Size: 216
'o', Type: Stream, Size: 268
'x', Type: Stream, Size: 60
'i25', Type: Storage, Size: 0
'f', Type: Stream, Size: 472
'o', Type: Stream, Size: 900
'CompObj', Type: Stream, Size: 110
'i26', Type: Storage, Size: 0
'f', Type: Stream, Size: 376
'o', Type: Stream, Size: 676
'CompObj', Type: Stream, Size: 110
'i27', Type: Storage, Size: 0
'f', Type: Stream, Size: 188
'o', Type: Stream, Size: 336
'CompObj', Type: Stream, Size: 110
'CompObj', Type: Stream, Size: 115
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 371
'frmPostenauszug', Type: Storage, Size: 0
'f', Type: Stream, Size: 1107
'o', Type: Stream, Size: 1677
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 311
'frmSplashscreen', Type: Storage, Size: 0
'f', Type: Stream, Size: 271
'o', Type: Stream, Size: 380
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 300
'frmAuftragSuchen', Type: Storage, Size: 0
'f', Type: Stream, Size: 1183
'o', Type: Stream, Size: 1628
'i44', Type: Storage, Size: 0
'f', Type: Stream, Size: 177
'o', Type: Stream, Size: 168
'CompObj', Type: Stream, Size: 112
'i47', Type: Storage, Size: 0
'f', Type: Stream, Size: 301
'o', Type: Stream, Size: 476
'CompObj', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 298
'frmAuftragÖffnen', Type: Storage, Size: 0
'f', Type: Stream, Size: 451
'o', Type: Stream, Size: 312
'i14', Type: Storage, Size: 0
'f', Type: Stream, Size: 321
'o', Type: Stream, Size: 408
'CompObj', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 373
'frmSaldonachweis', Type: Storage, Size: 0
'f', Type: Stream, Size: 615
'o', Type: Stream, Size: 896
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 318
'frmUmsatzdetails', Type: Storage, Size: 0
'f', Type: Stream, Size: 2075
'o', Type: Stream, Size: 2688
'i41', Type: Storage, Size: 0
'f', Type: Stream, Size: 77
'o', Type: Stream, Size: 0
'CompObj', Type: Stream, Size: 112
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 374
'frmBuchungsanzeige', Type: Storage, Size: 0
'f', Type: Stream, Size: 1883
'o', Type: Stream, Size: 2176
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 318
'frmBuchungsanzeigePrämieOLD', Type: Storage, Size: 0
'f', Type: Stream, Size: 2531
'o', Type: Stream, Size: 2932
'CompObj', Type: Stream, Size: 97
'VBFrame', Type: Stream, Size: 324
Ausschnitt eines BIFF-Dumps
Die folgende Abbildung zeige einen Ausschnitt vom Beginn des BIFF-Streams "Workbook" einer Exceldatei als Hex-Dump. Den Dump habe ich mit dem Freeware Utility BIFF Viewer aus dem Microsoft Excel 97 SDK generiert (Anmerkung des Autors: Den BIFF Viewer können Sie auf der Downloadseite kostenlos herunterladen).
| Erläuterung | Hex-Dump |
| Position 00000h: Beginn des ersten Records; Typ-ID 0809h (9dec; BOF). Der Datenteil des Records ist 0010h Byte lang (16 Byte). Der gesamte Record ist somit 14h Byte (20 Byte) lang (2 Byte Typ-ID + 2 Byte Record-Size + 16 Byte Daten = 20 Byte). Position 00014h: [...] Position 00024h:
|
00000: [BOF] (9h 9dec) 00000 09 08 10 00 00 06 05 00 d3 10 cc 07 c9 00 00 00 ........S.L.I... 00010 06 00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- .... 00014: [INTERFACEHDR] (E1h 225dec) 00000 e1 00 02 00 b0 04 -- -- -- -- -- -- -- -- -- -- a...0. 0001A: [MMS] (C1h 193dec) 00000 c1 00 02 00 00 00 -- -- -- -- -- -- -- -- -- -- A..... 00020: [INTERFACEEND] (E2h 226dec) 00000 e2 00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- b... 00024: [WRITEACCESS] (5Ch 92dec) 00000 5c 00 70 00 14 00 00 50 68 69 6c 69 70 70 20 76 \.p....Philipp v 00010 6f 6e 20 57 61 72 74 62 75 72 67 20 20 20 20 20 on Wartburg 00020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00070 20 20 20 20 -- -- -- -- -- -- -- -- -- -- -- -- |
'Book', Type: Excel Workbook, Size: 2458
00000: [BOF] (9h 9dec)
00000 09 08 08 00 00 05 05 00 83 15 cc 07 -- -- -- -- ..........L.
0809 0008 0500 0005 1583
07cc
Type Size Vers WGlob BldID
BldYear
5507d 1996d
XLStorage file D:\NEUEDA~1\DOWNLO~1\D39580.XLS
'Ctls', Type: Stream, Size: 64
'CompObj', Type: Stream, Size: 104
'Workbook', Type: Excel Workbook, Size: 22791
00000: [BOF] (9h 9dec)
00000 09 08 10 00 00 06 05 00 1c 0e cc 07 49 40 00 00 ..........L.I@..
ff 0809 0010 0600 0005 0e1c
07cc
00010 06 00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- ....
Die Recordtypen des Workbook/Book-Streams
Jeder Recordtyp des BIFF-Formates besitzt eine eindeutige Kennung (Identifikationsschlüssel; ID). Bei dieser ID handelt es sich um eine ganzzahlige Nummer, die aus technischen Gründen maximal ein vierstelliger Hex-Wert sein darf (sprich FFFF). Der grösste bekannte Hex-Wert ist 1066h (4198dec und wird vom Recordtyp namens GELFRAME verwendet. Jeder Recordtyp besitzt zudem eine Bezeichnung (einen Namen), die allerdings nicht eindeutig sein muss.
Beispiel:
ID: 9h
Name: BOF
Diese Tabelle zeigt eine Liste sämtlicher Recordtypen, die ich jemals angetroffen habe. Die Liste erhebt keinen Anspruch auf Vollständigkeit, da es möglicherweise noch weitere Recordtypen gibt.
Neue Recordtypen in BIFF8/BIFF8X
Diese Tabelle zeigt, welche Recordtypen in BIFF8 gegenüber
BIFF7 sowie in BIFF8X gegenüber BIFF8 neu hinzugekommen sind. Ein "
"
bedeutet, dass der Recordtyp neu eingeführt wurde.
| ID | Bezeichnung | BIFF8 | BIFF8X |
| 00E5H | MERGEDCELLS | ||
| 00E9H | BITMAP | ||
| 00FCH | SST | ||
| 00FDH | LABELSST | ||
| 00FFH | EXTSST | ||
| 015FH | LABELRANGES | ||
| 0160H | USESELFS | ||
| 0161H | DSF | ||
| 01AEH | SUPBOOK | ||
| 01B0H | CONDFMT | ||
| 01B2H | DVAL | ||
| 01B8H | HLINK | ||
| 01BEH | DV | ||
| 0800H | QUICKTIP | ||
| 0862H | SHEETLAYOUT | . | |
| 0867H | SHEETPROTECTION | . | |
| 0868H | RANGEPROTECTION | . |
Entfernte Recordtypen in BIFF8/BIFF8X
Diese Tabelle zeigt, welche Recordtypen in BIFF8 bzw.
BIFF8X gegenüber BIFF7 nicht mehr vorhanden sind. Ein "
"
bedeutet, dass der Recordtyp nicht mehr unterstützt wird. Ein "
"
bedeutet, dass der Recordtyp gelesen werden kann aber nicht mehr geschrieben wird.
| ID | Bezeichnung | BIFF8 | BIFF8X |
| 0004H/0204H | LABEL | ||
| 0016H | EXTERNCOUNT | ||
| 00D6H | RSTRING |
Ein paar interessante Recordtypen
XF-Record
Index auf einen FONT-Record
00662: [XF] (E0h 224dec)
00000 e0 00 14 00 05 00 00 00 01 00 20 00 00
08 00 00 `......... .....
00010 00 00 00 00 00 00 c0 20 -- -- -- -- -- -- -- -- ......@
0067A: [XF] (E0h 224dec)
00000 e0 00 14 00 06 00 00 00 01 00 20 00 00
08 00 00 `......... .....
00010 00 00 00 00 00 00 c0 20 -- -- -- -- -- -- -- -- ......@
00692: [XF] (E0h 224dec)
00000 e0 00 14 00 07 00 00 00 01 00 20 00 00
08 00 00 `......... .....
00010 00 00 00 00 00 00 c0 20 -- -- -- -- -- -- -- -- ......@
ROW-Record
01108: [ROW] (8h 8dec)
00000 08 02 10 00 01 00 00 00 21 00
1d 01 00 00 54 30 ........!.....T0
00010 00 01 12 00 -- -- -- -- -- -- -- -- -- -- -- -- ....
01 = Index des ROW-Records
00 = Spalte der ersten Zelle der Zeile
21 = Spalte der letzten Zelle der Zeile (Hex 21 = Dec 33 -> Spalte 33 -> Spalte AG)
Die Art und Weise der Informationsspeicherung
In diesem Abschnit wird kurz vorgestellt, wie Informationen in einer BIFF-Datei abgelegt werden.
Wie weiter oben erwähnt wurde, sind die in einem Stream enthaltenen Daten gewöhnlich als Records gespeichert.
Alle Informationen, die mehr als nur ein Byte beanspruchen, werden mit der Little-Endian Methode in mehreren Bytes gespeichert.
Little-Endian
16-bit-Werte: Low Byte/High Byte
32-bit-Werte: Least significant byte is stored first and the most significant byte last.
Beispiel: 16-bit-integers, 32-bit-integers, floating-point values, Unicode characters
8-bit-Werte benötigen nur ein Byte (weil 8 Bits = 1 Byte ist).
Beispiel: ANSI characters (z.B. Buchstabe "A" -> 41h bzw. 65dec)
Jeder Record besitzt einen Record-Header und einen Record-Body (der Record-Body ist bei ein paar wenigen Recordtypen 0 Byte lang, u.a. bei den Typen EOF, BEGIN und END).
OLE Structured Storage-Dateien und VBA
An dieser Stelle möchte ich ein paar Hinweise bezüglich VBA und BIFF geben und zeigen, wie man mit VBA unter anderem eine OLE Structured Storage-Datei lesen kann.
Öffnen einer OLE Structured Storage-Datei
Es ist mir leider nicht bekannt, wie man mit VBA direkt auf einen bestimmten Storage oder Stream einer OLE Structured Storage-Datei zugreifen kann. Es existiert zwar eine Windows-DLL mit entsprechenden API-Funktionen. Ich kenne jedoch keinen Weg, wie diese in einem VBA-Programm verwendet werden (mit C/C++ wäre es dagegen kein Problem).
Der einzige Stream, den man auf einfache Art und Weise mit VBA lesen und schreiben kann, ist der 'DocumentSummaryInformation'-Stream, da es dazu eine spezielle Objektbibliothek namens "OLE Document Properties Object Library" gibt.
Informationen über diese Objektbibliothek erhalten Sie hier:
Weitere Informationen |
|
Die Objektbibliothek "OLE Document Properties Object Library" können Sie hier herunterladen:
Weitere Informationen |
|
Das Öffnen eines anderen Streams oder Storages ist mit VBA somit nicht möglich. Folglich kann der Workbook- bzw. Book-Stream einer BIFF-Datei nicht direkt angesprochen werden. Es bleibt nur die Möglichkeit, die gesamte Datei zu öffnen. Das ist einfach realisierbar, da man die Datei lediglich mit der Open-Anweisung im Binary-Zugriffsmodus zu lesen braucht:
Open strFile For Binary Access Read Write Lock Read
Write As #1
'VBA-Programmcode...
Close #1
Die Variable strFile enthält den Pfad und Namen der OLE Structured Storage-Datei. Wie im obigen Beispiel zu sehen ist, wird die Datei für den Lese-/Schreibzugriff geöffnet (Access Read Write) und dabei für Lese- und Schreibzugriffe durch andere Anwendungen gesperrt (Lock Read Write). Es ist zwar weder notwendig, die Datei im Schreibzugriff zu öffnen, noch die Datei exklusiv zu sperren. Ich persönlich mache dies jedoch, da ich in meinen Programmen sicher sein will, das während der Dateibenutzung keine andere Anwendung und kein anderer Benutzer auf die Datei zugreift.
Prüfen ob eine Datei das OLE Structured Storage-Format besitzt
Anhand den ersten sechs Bytes einer Datei lässt sich feststellen, ob die Datei das OLE Structured Storage-Format verwendet. Wenn die ersten sechs Bytes die Hex-Werte D0, CF, 11, E0, A1 und B1 beziehungsweise die Dezimalwerte 208, 207, 17, 224, 161 und 177 aufweisen, dann besitzt die Datei das genannte Format.
Die Tabelle zeigt die Werte dieser Bytes:
| Byte | Hex Value | Dec Value | Character |
| 1 | D0 | 208 | Ð |
| 2 | CF | 207 | Ï |
| 3 | 11 | 17 | |
| 4 | E0 | 224 | à |
| 5 | A1 | 161 | ¡ |
| 6 | B1 | 177 | ± |
Codebeispiele
Hier ein paar Beispiele, wie Sie mit VBA oder VB überprüfen können, ob eine Datei das OLE Structured Storage-Format besitzt.
Beispiel 1: Dateiformat-Kontrolle in einer Sub-Prozedur
Public Sub CheckOLEFileFormat()
Dim strFile As String
Dim strContents As String
strFile = "C:\Daten\EinDokument.doc"
Open strFile For Binary Access Read Write Lock Read Write As #1
strContents = Input(6, #1)
If strContents = "ÐÏࡱ" Then
MsgBox "Die Datei " & strFile & "
besitzt das OLE Structured Storage-Format."
Else
MsgBox "Die Datei " & strFile &
" besitzt nicht das OLE Structured Storage-Format."
End If
Close #1
End Sub
Beispiel 2: Dateiformat-Kontrolle als Function-Prozedur
Public Function IsOLEFileFormat(ByVal strFile As
String) As Boolean
Dim strContents As String
Open strFile For Binary Access Read Write Lock Read Write As #1
strContents = Input(6, #1)
If strContents = "ÐÏࡱ" Then
IsOLEFileFormat = True
Else
IsOLEFileFormat = False
End If
Close #1
End Function
Public Sub TestCall()
Dim strFullFilename As String
strFullFilename = "C:\Daten\EineMappe.xls"
If IsOLEFileFormat(strFullFilename) Then
MsgBox "Die Datei " & strFullFilename & "
besitzt das OLE Structured Storage-Format."
Else
MsgBox "Die Datei " & strFullFilename & "
besitzt nicht das OLE Structured Storage-Format."
End If
End Sub
ToDo...
Public Sub CheckOLEFileFormat()
Dim strFile As String
Dim lngFileLength As Long
Dim strContents As String
strFile = "C:\Daten\EinDokument.doc"
lngFileLength = FileLen(strFile)
Open strFile For Binary Access Read Write Lock Read Write As #1
strContents = Input(lngFileLength, #1)
For lngCounter = 1 To lngFileLength
If CheckByte(strContents, lngCounter,
"D0") And CheckByte(strContents, lngCounter + 1, "CF") _
And CheckByte(strContents,
lngCounter + 2, "11") And CheckByte(strContents, lngCounter + 3, "E0")
_
And CheckByte(strContents,
lngCounter + 4, "A1") And CheckByte(strContents, lngCounter + 5, "B1")
Then
MsgBox "Die Datei besitzt das OLE
Structured Storage-Format."
Exit For
End If
Next lngCounter
Close #1
End Sub
Public Function CheckByte(ByVal strContents As String,
ByVal lngPosition As Long, ByVal strResult As String) As Boolean
If Hex(Asc(Mid$(strContents, lngPosition, 1))) = strResult Then
CheckByte = True
Else
CheckByte = False
End If
End Function
ToDo...
If CheckRecord(varBytes, lngCounter, "9") And
CheckRecord(varBytes, lngCounter + 1, "8") Then
If CheckRecord(varBytes, lngCounter + 2, "10") Then
'RecLength: Hex 10 (bzw. 16 Bytes) bei BIFF8
MsgBox "Die Datei besitzt das BIFF8-Format."
ElseIf CheckRecord(varBytes, lngCounter + 2, "8") Then
'RecLength: Hex 8 (bzw. 8 Bytes) bei BIFF5/BIFF7
MsgBox "Die Datei besitzt das BIFF5/BIFF7-Format."
End If
End If
Welche Dokumentationen existieren zu BIFF?
Im Jahr 1999 hat Microsoft die Dokumentation des Microsoft Office Binary File Format aus der MSDN genommen. Eine offizielle, öffentlich zugängliche Dokumentation existiert daher nicht mehr.Microsoft Corporation hat folgenden Hinweis veröffentlicht:
"If you would like to receive this documentation, you can send e-mail to officeff@microsoft.com, or mail to:
Office File Format Documentation
Request
One Microsoft Way
Redmond, WA 98052
Requests should contain a detailed description for planned use of this documentation."
Microsoft Excel 97 Developer's Kit
Die vermutlich beste Literatur ist das Developer's Kit von Microsoft Excel 97:
"Microsoft Excel 97 Developer's Kit"
Microsoft Press, ISBN 1-57231-498-2
Es ist die einzige offizielle (d.h. von Microsoft herausgegebene) Dokumentation des BIFF8-Formates, welches von den gängigen Excelversionen verwendet wird. Ausserdem ist es die einzige vollständige Beschreibung überhaupt. Leider ist das Buch vergriffen und wird nicht mehr gedruckt. Über Amazon (www.amazon.com) müsste jedoch ein gebrauchtes Exemplar aufzutreiben sein.
OpenOffice.org Documentation of the Microsoft Excel File Format
OpenOffice.org (www.OpenOffice.org) hat ebenfalls eine sehr gute Dokumentation herausgegeben, die laufend aktualisiert wird, aber noch nicht vollständig ist:
"OpenOffice.org's Documentation of the Microsoft Excel File Format"
Es fehlen unter anderem Informationen über AutoFilter, Conditional Formatting, Scenarios, Escher Layer, Stream Encryption und Range Protection. In Bezug auf die Ablage der Daten von Arbeitsblättern und Zellen steht jedoch sehr viel, meistens sogar alles drin.
Microsoft Excel 97 SDK BIFF Viewer
Im Microsoft Excel 97 SDK (SDK ist die Abkürzung von 'Software Development Kit') ist unter anderem ein Utility namens "BIFF File Viewer" (Version 1.8.0) enthalten, mit dem man Dumps von BIFF-Dateien erstellen und diese in Form einer Baumstruktur ansehen kann. Das Programm ist eigentlich zum Lesen von Excel 5.0 xls-Dateien gedacht, kann jedoch auch eingeschränkt mit anderen Dokumenten benutzt werden, sofern diese im OLE2 Storage-Format gespeichert sind. So funktionieren beispielsweise Word-Dokumente (doc-Dateityp) und PowerPoint-Präsentationen (ppt) recht gut. Zumindest zeigt der BIFF Viewer die verschiedenen Streams und Storages sowie allfällig enthaltene VBA-Projekte. Auch Nicht-Office-Dateien können oft gelesen werden, wie z.B. Reports (rpt), die mit der Software "Crystal Reports" (Hersteller "Crystal Decisions") erstellt wurden, oder Dateien der Management Konsole (msc; Microsoft Management Console), sowie sogar box-Dateien (VBE Toolbox; VBA-Editor Werkzeugsammlung) und pag-Dateien (VBE Toolbox Page; VBA-Editor Werkzeugsammlung-Seite).
Natürlich können nebst Exceldateien der Version 5.0 auch Dateien von Excel 95, Excel 97, Excel 2000, Excel 2002 sowie Excel 2003 praktisch ohne Einschränkung gelesen werden. Mit "praktisch ohne Einschränkung" meine ich, dass es schon mal passieren kann, dass der BIFF Viewer keinen Dump zustande bringt, falls die Exceldatei zu komplex ist. Diese Fälle sind jedoch selten. Die Grösse einer xls-Datei spielt keine Rolle, d.h. auch grössere Dateien können gedumpt werden. Allerdings muss bei derartigen Dateien der BIFF Dump direkt in ein Textfile erfolgen; die Anzeige am Bildschirm ist nicht möglich. Man sollte auch berücksichtigen, dass eine Dump-Datei aufgrund der vielen enthaltenen Informationen wesentlich grösser als die xls-Datei wird. Der Dump einer 2.5 MB Exceldatei kann ohne weiteres 15 MB Speicherplatz auf der Festplatte belegen.
Artikel in der Microsoft Knowledge-Base
How To
Determine Which Version of Excel Wrote a Workbook
http://support.microsoft.com/?scid=kb;en-us;225029
How To
Determine the Version of a Microsoft Excel Workbook
http://support.microsoft.com/?scid=kb;en-us;178605
How To
Distinguish Between Excel 97 and Excel 2000/2002 Files
http://support.microsoft.com/?scid=kb;en-us;269168
Microsoft
Excel's Internal Format Table Doc Has Errors
http://support.microsoft.com/?scid=kb;en-us;147942
BIFF8
BOUNDSHEET Record Data for Uncompressed Unicode
http://support.microsoft.com/default.aspx?scid=kb;en-us;187919
BIFF
Records Documentation Error in MS Excel 97 Developer's Kit
http://support.microsoft.com/default.aspx?scid=kb;en-us;184647
Excel
BIFF8 CONTINUE Record Information Is Incomplete
http://support.microsoft.com/default.aspx?scid=kb;en-us;207475
Excel
BIFF8 FORMAT Record Documentation Is Incomplete
http://support.microsoft.com/?kbid=284441
LABEL Doc
Error in MS Excel 97 Developer's Kit
http://support.microsoft.com/default.aspx?scid=kb;en-us;195237
XL2002:
"Print Cell Errors As" Setting Is Lost When You Open and Save Workbook in
Earlier Version
http://support.microsoft.com/?scid=kb;en-us;282406
Microsoft Excel 2002: Issues Fixed by the Update: October 4, 2001
Change in Binary File Can Bypass Macro Controls:
An Excel workbook stream can be altered in such a way that the macros in the file
will run without prompting a macro warning or being stopped by macro controls.
XL2002: Overview of the Excel 2002 Update: October
4, 2001
http://support.microsoft.com/?scid=kb;EN-US;306606
Links zu weiteren Informationsquellen
Office 97 Resource Kit Chapter 36: Microsoft Excel
Architecture
http://www.microsoft.com/office/ork/036/036.htm
Unterhaltsamer Artikel über BIFF von Michael
Schwimmer
http://schwimmer.bei.t-online.de/biff.htm
BIFF-Parser von Michael Schwimmer (Download)
http://schwimmer.bei.t-online.de/download/Biff.zip
(enthält eine Excel-Arbeitsmappe)
Beschreibung zum BIFF-Dateiformat (Download)
http://195.186.84.74/download/docs/XLS-Format-BIFF8.zip
(enthält ein Word-Dokument)
http://195.186.84.74/download/docs/ExcelFileFormatV3.zip
(enthält ein PDF-Dokument)
http://195.186.84.74/download/docs/ExcelFileFormatV5.zip
(enthält ein PDF-Dokument)
Informationen über die obigen Dateien finden Sie auf der Downloadseite der Website xlam.
Interessanter Artikel zum Thema "Exceldateien
lesen und schreiben"
http://www21.brinkster.com/wwwexpert/internet/excel.htm
The Apache Jakarta Project: HSSF
http://jakarta.apache.org/poi/hssf/index.html
Excel Writer
http://excelwriter.softartisans.com/
Chicago Developer Page: BIFF8
http://chicago.sourceforge.net/devel/docs/excel/biff8.html
Microsoft Pocket Excel File Format
http://chicago.sourceforge.net/devel/docs/excel/pkt/index.html
Microsoft Office 97 Drawing File Format (Escher
Layer)
http://chicago.sourceforge.net/devel/docs/escher/index.html
Excel File Format Documentation
http://chicago.sourceforge.net/devel/docs/excel/
Apple of Discord: VBA Storage
http://craiu.pcnet.ro/papers/papers/macoffice.html
Hier ein paar Tools, die einen Zusammenhang mit dem Thema "BIFF-Dateiformat" besitzen (alphabetische Liste):
BIFF Viewer
BIFF-Dumper
BIFF-Workbench
BIFF8-Parser
EFEX
FileFox
FxEdit
Workbook Font Counter
XLock
XLSFileUsers
Alle Tools sind Freeware und können auf der Downloadseite der Website xlam heruntergeladen werden. Dort finden Sie ausserdem ausführliche Produkt-Beschreibungen sowie weitere Programme, Dokumentationen und Musterdateien.
Dokumentation zum BIFF Viewer von Microsoft
Tipp!
Allgemeine Informationen über den BIFF Viewer finden Sie im
Kapitel Microsoft Excel 97 SDK BIFF Viewer.
Der BIFF Viewer
Das Utility "BIFF Viewer" (auch "BIFFView" oder "Microsoft BIFF File Viewer" genannt) ist Bestandteil des Microsoft Excel 97 SDK (SDK ist die Abkürzung von 'Software Development Kit'). Mit diesem Utility kann Dumps von Dateien erstellen, die das BIFF-Dateiformat besitzen. Ein solcher BIFF-Dump kann in Form einer Baumstruktur auf dem Bildschirm angezeigt oder direkt in eine Textdatei gespeichert werden. Die Ausgabe eines Dumps auf dem Bildschirm ist nur bei relativ kleinen Exceldateien möglich.
Natürlich können nebst Exceldateien der Version 5.0 auch Dateien der Versionen Excel 95, Excel 97, Excel 2000 und Excel 2002 praktisch ohne Einschränkung gelesen werden. Mit "praktisch ohne Einschränkung" meine ich, dass es schon mal passieren kann, dass der BIFF Viewer keinen Dump zustande bringt. Dies, wenn die Exceldatei zu komplex ist. Diese Fälle sind jedoch äusserst selten. Die Grösse einer xls-Datei spielt keine Rolle, d.h. auch grössere Dateien können gedumpt werden. Allerdings muss bei derartigen Dateien der BIFF Dump direkt in ein Textfile erfolgen; die Anzeige am Bildschirm ist nicht möglich. Man sollte auch berücksichtigen, dass eine Dump-Datei aufgrund der vielen enthaltenen Informationen wesentlich grösser als die xls-Datei wird. Der Dump einer 2.5 MB Exceldatei kann ohne weiteres 15 MB Speicherplatz auf der Festplatte belegen.
Die Dokumentation zum BIFF Viewer
In Bezug auf Funktionalität ist der BIFF Viewer äusserst sparsam ausgestattet. Man erkennt auf den ersten Blick, dass das Tool nur einen einzigen Zweck besitzt, nämlich das Generieren von BIFF-Dumps. Da es von Herstellerseite (sprich Microsoft Corporation) keine Anleitung zum BIFF Viewer gibt, habe ich selbst eine umfassende Dokumentation verfasst. Die Benutzung der Programmfunktionen ist zwar nicht sonderlich schwierig. Doch es gibt ein paar Programmfehler, Probleme und Spezialitäten, deren Kenntnis von Vorteil wäre. Zudem ist in der Dokumentation beschrieben, welche Informationen ein BIFF-Dump enthält, was man damit anfangen kann, wie man einen Dump analysiert und vieles mehr.
Die Dokumentation mit dem Titel "BIFF-Viewer User's Guide" kann auf der Downloadseite der Website xlam heruntergeladen werden:
Zuletzt aktualisiert am
23.04.2005 / 16:30 Uhr
© 2002-2005 by Philipp von Wartburg, CH-8916 Jonen
Alle Rechte vorbehalten