HotXLS-Dokumentation / API-Referenz

Compound-File-Speicher

lxCompoundFile liest und schreibt Compound File Binary-Container über Pascal-Streams, einschließlich verschachtelter Storage-Scopes, MiniFAT-Payloads und verketteter DIFAT-Sektoren; die nativen Classic-BIFF8-Arbeitsmappen-APIs nutzen dieses Backend unter Linux und macOS

Verwenden Sie für Tabellenkalkulationsarbeit die gewöhnlichen Open- und SaveAs-Aufrufe der Arbeitsmappe; die nachfolgenden APIs auf niedrigerer Ebene sind nützlich, um verschachtelte Streams zu inspizieren, Container zu bauen und Storage-Metadaten zu erhalten

Container lesen oder bauen

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) lädt Verzeichnis- und Allokationsmetadaten; AOwnsStream steht standardmäßig auf False, und der zugrunde liegende Stream muss während der Extraktion seiner Inhalte verfügbar bleiben

CreateNew(AStream, AOwnsStream) bereitet einen neuen Container vor, AddStorage und AddStream stellen Inhalte in die Warteschlange, und Save schreibt einen Container der Version 3 mit allen benötigten DIFAT-Erweiterungssektoren

MemberVerhalten
RootIndexDie Identität des Wurzelverzeichniseintrags, dient als Elternknoten für Storage und Streams der obersten Ebene
AddStorage(Name, ParentIndex)Stellt einen verschachtelten Storage in die Warteschlange und liefert seine Verzeichnisidentität zum Hinzufügen von Kindern
AddStream(Name, Data)Stellt einen Byte-Stream auf Root-Ebene in die Warteschlange
AddStream(Name, Data, ParentIndex)Stellt einen Byte-Stream im gewählten Eltern-Scope in die Warteschlange und liefert seine Identität
OpenStream(Name), OpenStream(Name, ParentIndex)Extrahiert einen Root- oder Scoped-Stream in einen eigenen TlxCfbStream; ein fehlender Stream liefert nil
OpenEntryStream(Index)Extrahiert einen Verzeichnis-Stream per Identität; ein ungültiger oder Nicht-Stream-Eintrag liefert nil
HasStream(Name), HasStream(Name, ParentIndex)Prüft das Vorhandensein eines Streams im Root- oder im gewählten Eltern-Scope
FindStorage(Name, ParentIndex)Liefert eine Storage-Identität im gewählten Elternknoten oder -1, wenn kein passender Storage existiert
EntryCount, Entries(Index)Dient der Inspektion geladener Verzeichniseinträge; Indizes sind nullbasiert und müssen gültig sein
SetEntryMetadata(Index, Entry)Kopiert nur Class-ID, State-Bits und Zeitstempel in einen gültigen Eintrag in der Warteschlange oder in den Root; strukturelle Identitäten und Payloads bleiben unverändert

Der TlxCfbEntry-Record legt Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child und den abgeleiteten ParentIndex offen; Verzeichnislinks sind Indizes, und -1 kennzeichnet eine fehlende Identität

Seine Metadatenfelder sind ClassID, StateBits, CreationTime und ModificationTime; Zeitstempel behalten rohe FILETIME-Ticks ab der 1601-UTC-Epoche, statt ein gebietsabhängig formatiertes Datum zu liefern

TlxCfbEntryType umfasst cfbEmpty, cfbStorage, cfbStream und cfbRoot; TlxCfbStream legt Name, Size, Data, Read, Seek und CopyTo offen

Extrahierte Streams besitzen abgekoppelte Bytes und müssen vom Aufrufer freigegeben werden; Korruption, unvollständige Ketten, ungültiger Besitz und zyklische Verzeichnis- oder Allokationsgraphen weisen zurück, statt abgeschnittene Payloads zu liefern

lxCfbCompareNames(A, B) wendet die Compound-File-Binary-Sortierung mit Länge zuerst und festgelegter einfacher BMP-Uppercase-Zuordnung an; doppelte Namen sind auf ihren Elternknoten beschränkt, und identische Namen in getrennten verschachtelten Storages bleiben unterscheidbar

Native Storage-Interfaces

Auf Nicht-Windows-Zielen liefert lxOLE die Storage-Interface-Implementierung, die das Laden und Speichern von Classic-Arbeitsmappen benötigt; ihre IStorage-, IStream- und IEnumStatStg-Schnittstellen behalten expliziten Interface-Besitz und abgekoppelten nativen Containerzustand

Factory oder HelperKontrakt
XlsOpenCompoundStorage(Source, Storage)Lädt einen nur lesenden Container ab Stream-Offset null
XlsOpenCompoundStorage(Source, Start, Storage)Lädt den Container ab dem expliziten nichtnegativen Offset
XlsCreateCompoundStorage(Storage)Erstellt schreibbaren nativen Storage mit verschachtelten Scopes und Streams
XlsWriteCompoundStorage(Storage, Destination)Serialisiert den nativen Root-Storage in den gelieferten Stream; fremde Implementierungen und Nicht-Root-Storage weisen zurück
XlsFreeCompoundStorageName(Name)Gibt native Namen frei, die Storage-Statistiken oder Enumerationen geliefert haben; nil wird akzeptiert

Die Factories liefern HResult; prüfen Sie Succeeded(Result), bevor Sie das zurückgegebene Interface verwenden, und geben Sie Interface-Referenzen frei, wenn Sie fertig sind

Veränderung im Nur-Lese-Modus schlägt fehl, geklonte Stream-Cursor behalten unabhängige Positionen, und verschachtelte Kopien erhalten Elternidentität und unterstützte Metadaten; die direkte Serialisierung liefert nicht den Kontrakt der höherwertigen Arbeitsmappen-Zieltransaktion

Kanonische Arbeitsmappen-Identifikatoren

XlsIdentifierKeyText(const A: WideString): WideString in lxStandard liefert die UTF-16-Textrepräsentation des bestehenden festgelegten Unicode-Identifikatorschlüssels, sodass der Classic-Speicher definierter Namen kanonische Gleichheit mit anderen Arbeitsmappen-Engines teilen kann

Diese Schlüsselrepräsentation dient der Identität und dem Lookup, nicht der angezeigten Schreibweise; verfasste Namen bleiben unverändert, und der CFB-Verzeichnis-Komparator behält seine separate, vom Format vorgeschriebene Sortierung

Siehe Free-Pascal-Unterstützung für native Build-Anforderungen und den verifizierten BIFF8-Arbeitsmappenkontrakt sowie Classic-Verschlüsselung für unterstütztes Verschlüsselungs- und Klartext-Property-Stream-Verhalten