HotXLS-documentatie / API-naslag

Opslag in compound files

lxCompoundFile leest en schrijft Compound File Binary-containers via Pascal-streams, inclusief geneste opslagscopes, MiniFAT-payloads en gekoppelde DIFAT-sectoren; native Classic BIFF8-werkmap-API's gebruiken deze backend op Linux en macOS

Gebruik gewone werkmap-Open- en SaveAs-aanroepen voor spreadsheetwerk; de onderstaande API's op lager niveau zijn handig voor het inspecteren van geneste streams, het bouwen van containers en het behouden van opslagmetadata

Een container lezen of bouwen

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) laadt map- en allocatiemetadata; AOwnsStream staat standaard op False, en de onderliggende stream moet beschikbaar blijven zolang je de inhoud extraheert

CreateNew(AStream, AOwnsStream) bereidt een nieuwe container voor, AddStorage en AddStream zetten de inhoud in de wachtrij, en Save schrijft een versie-3-container met eventuele benodigde DIFAT-extensiesectoren

LidGedrag
RootIndexDe identiteit van het hoofdmapitem, gebruikt als ouder voor opslag en streams op het hoogste niveau
AddStorage(Name, ParentIndex)Zet een geneste opslag in de wachtrij en geeft zijn map-identiteit terug voor het toevoegen van kinderen
AddStream(Name, Data)Zet een bytestream op hoofdniveau in de wachtrij
AddStream(Name, Data, ParentIndex)Zet een bytestream in de gekozen ouder-scope in de wachtrij en geeft zijn identiteit terug
OpenStream(Name), OpenStream(Name, ParentIndex)Extraheert een stream op hoofdniveau of binnen een scope naar een beheerde TlxCfbStream; een ontbrekende stream geeft nil terug
OpenEntryStream(Index)Extraheert een mapstream op identiteit; een ongeldig item of een item dat geen stream is geeft nil terug
HasStream(Name), HasStream(Name, ParentIndex)Test of een stream bestaat in de hoofdmap of in de gekozen ouder-scope
FindStorage(Name, ParentIndex)Geeft een opslagidentiteit in de gekozen ouder terug, of -1 wanneer er geen matchende opslag bestaat
EntryCount, Entries(Index)Inspecteert geladen mapitems; indexen zijn zero-based en moeten geldig zijn
SetEntryMetadata(Index, Entry)Kopieert uitsluitend class ID, statusbits en tijdstempels naar een geldig item in de wachtrij of naar de hoofdmap; structurele identiteiten en payloads blijven onveranderd

Het TlxCfbEntry-record stelt Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child en de afgeleide ParentIndex beschikbaar; mapkoppelingen zijn indexen, en -1 betekent een afwezige identiteit

De metadata-velden zijn ClassID, StateBits, CreationTime en ModificationTime; tijdstempels behouden rauwe FILETIME-ticks vanaf het 1601 UTC-tijdperk in plaats van een op landinstelling gebaseerde datum

TlxCfbEntryType omvat cfbEmpty, cfbStorage, cfbStream en cfbRoot; TlxCfbStream stelt Name, Size, Data, Read, Seek en CopyTo beschikbaar

Geëxtraheerde streams zijn eigenaar van losgemaakte bytes en moeten door de aanroeper worden vrijgegeven; corruptie, onvolledige ketens, ongeldig eigendom en cyclische map- of allocatiegrafieken worden geweigerd in plaats van afgekapte payloads terug te geven

lxCfbCompareNames(A, B) past de Compound File Binary-volgorde met lengte eerst toe met een vastgepinde eenvoudige BMP-hoofdlettertoewijzing; duplicaatnamen worden binnen hun ouder geplaatst, en identieke namen in aparte geneste opslagruimten blijven onderscheiden

Native opslaginterfaces

Op niet-Windows-doelen levert lxOLE de opslaginterface-implementatie die Classic-werkmap laden en opslaan nodig heeft; zijn IStorage, IStream en IEnumStatStg behouden expliciete interface-eigendom en losgemaakte native containerstatus

Factory of helperContract
XlsOpenCompoundStorage(Source, Storage)Laadt een alleen-lezen container vanaf streamoffset nul
XlsOpenCompoundStorage(Source, Start, Storage)Laadt de container vanaf de expliciete niet-negatieve offset
XlsCreateCompoundStorage(Storage)Maakt beschrijfbare native opslag met geneste scopes en streams
XlsWriteCompoundStorage(Storage, Destination)Serialiseert de native hoofdopslag naar de meegegeven stream; implementaties van derden en niet-hoofdopslag worden geweigerd
XlsFreeCompoundStorageName(Name)Geeft native namen vrij die door opslagstatistieken of enumeratie zijn teruggegeven; nil wordt geaccepteerd

De factories geven HResult terug; test Succeeded(Result) voordat je de teruggegeven interface gebruikt, en geef interfacereferenties vrij wanneer je klaar bent

Muteren in alleen-lezen modus mislukt, gekloonde streamcursors behouden onafhankelijke posities, en geneste kopieën behouden ouderidentiteit en ondersteunde metadata; directe serialisatie biedt niet het contract op hoger niveau voor de transacties van werkmappendoelen

Canonieke werkmap-identificaties

XlsIdentifierKeyText(const A: WideString): WideString in lxStandard geeft de UTF-16-tekstrepresentatie van de bestaande vastgepinde Unicode-identificatiesleutel terug, zodat Classic-opslag van gedefinieerde namen canonieke gelijkheid kan delen met andere werkmapengines

Deze sleutelrepresentatie is bedoeld voor identiteit en opzoeken, niet voor de weergegeven schrijfwijze; geschreven namen blijven onveranderd, en de CFB-mapvergelijker houdt zijn eigen door het formaat voorgeschreven volgorde aan

Zie Free Pascal-ondersteuning voor de native buildvereisten en het geverifieerde BIFF8-werkmapcontract, en Classic-versleuteling voor ondersteunde versleuteling en gedrag van property-streams in leesbare tekst