HotXLS-dokumentation / API-referens

Lagring i Compound File-format

lxCompoundFile läser och skriver Compound File Binary-containrar via Pascal-strömmar, inklusive nästlade lagringsscope, MiniFAT-nyttolaster och länkade DIFAT-sektorer; inbyggda Classic BIFF8-arbetsboks-API:er använder den backenden på Linux och macOS

Använd vanliga arbetsboksanrop till Open och SaveAs för kalkylbladsarbete; de lägre API:erna nedan är användbara för att inspektera nästlade strömmar, bygga containrar och bevara lagringsmetadata

Läs eller bygg en container

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) läser in katalog- och allokeringsmetadata; AOwnsStream är False som standard, och den underliggande strömmen måste finnas tillgänglig medan dess innehåll extraheras

CreateNew(AStream, AOwnsStream) förbereder en ny container, AddStorage och AddStream köar dess innehåll, och Save skriver en version 3-container med de DIFAT-utökade sektorer som krävs

MedlemBeteende
RootIndexRotkatalogpostens identitet, som används som förälder för lagring och strömmar på toppnivå
AddStorage(Name, ParentIndex)Köar en nästlad lagring och returnerar dess katalogidentitet för att lägga till barn
AddStream(Name, Data)Köar en byteström på rotnivå
AddStream(Name, Data, ParentIndex)Köar en byteström i den valda förälderns scope och returnerar dess identitet
OpenStream(Name), OpenStream(Name, ParentIndex)Extraherar en rot- eller scope-ström till en ägd TlxCfbStream; en saknad ström returnerar nil
OpenEntryStream(Index)Extraherar en katalogström via identitet; en ogiltig eller icke-strömpost returnerar nil
HasStream(Name), HasStream(Name, ParentIndex)Testar om en ström finns i roten eller i den valda förälderns scope
FindStorage(Name, ParentIndex)Returnerar en lagringsidentitet i den valda föräldern, eller -1 när ingen matchande lagring finns
EntryCount, Entries(Index)Inspekterar inlästa katalogposter; indexen är nollbaserade och måste vara giltiga
SetEntryMetadata(Index, Entry)Kopierar endast klass-ID, tillståndsbitar och tidsstämplar till en giltig köad post eller till roten; strukturella identiteter och nyttolaster lämnas oförändrade

TlxCfbEntry-posten exponerar Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child och härledd ParentIndex; kataloglänkar är index, och -1 betecknar en frånvarande identitet

Dess metadatafält är ClassID, StateBits, CreationTime och ModificationTime; tidsstämplar behåller råa FILETIME-tick från 1601-epoken UTC i stället för ett lokalformaterat datum

TlxCfbEntryType omfattar cfbEmpty, cfbStorage, cfbStream och cfbRoot; TlxCfbStream exponerar Name, Size, Data, Read, Seek och CopyTo

Extraherade strömmar äger fristående byte och måste frigöras av uppringaren; korruption, ofullständiga kedjor, ogiltigt ägarskap och cykliska katalog- eller allokeringsgrafer avslås i stället för att returnera avklippta nyttolaster

lxCfbCompareNames(A, B) tillämpar Compound File Binary:s längd-först-ordning med fast enkel BMP-versalmappning; dubblettnamn är avgränsade till sin förälder, och identiska namn i separata nästlade lagringar förblir åtskilda

Inbyggda lagringsgränssnitt

På icke-Windows-mål tillhandahåller lxOLE den lagringsgränssnittsimplementering som Classic-arbetsboksladdning och -sparning kräver; dess IStorage, IStream och IEnumStatStg behåller uttryckligt gränssnittsägarskap och ett fristående inbyggt containertillstånd

Fabrik eller hjälpareKontrakt
XlsOpenCompoundStorage(Source, Storage)Läser in en skrivskyddad container med början vid strömoffset noll
XlsOpenCompoundStorage(Source, Start, Storage)Läser in containern med början vid det uttryckliga icke-negativa offsetet
XlsCreateCompoundStorage(Storage)Skapar skrivbar inbyggd lagring med nästlade scope och strömmar
XlsWriteCompoundStorage(Storage, Destination)Serialiserar den inbyggda rotlagringen till den angivna strömmen; främmande implementeringar och icke-rotlagring avslås
XlsFreeCompoundStorageName(Name)Frigör inbyggda namn som returnerats av lagringsstatistik eller uppräkning; nil godtas

Fabrikerna returnerar HResult; testa Succeeded(Result) innan det returnerade gränssnittet används, och släpp gränssnittsreferenserna när du är klar

Mutation i skrivskyddat läge misslyckas, klonade strömkursors behåller oberoende positioner, och nästlade kopior bevarar förälderidentitet och stödd metadata; direkt serialisering tillhandahåller inte det högre transaktionskontraktet för arbetsboksdestinationer

Kanoniska arbetsboksidentifierare

XlsIdentifierKeyText(const A: WideString): WideString i lxStandard returnerar UTF-16-textrepresentationen av den befintliga fasta Unicode-identifierarnyckeln, vilket låter Classic:s lagring av definierade namn dela kanonisk likhet med andra arbetsboksmotorer

Den här nyckelrepresentationen är till för identitet och uppslagning, inte för visad stavning; författade namn lämnas oförändrade, och CFB-katalogjämföraren behåller sin separata, av formatet föreskrivna ordning

Se Free Pascal-stöd för inbyggda byggkrav och det verifierade BIFF8-arbetsbokskontraktet, samt Classic-kryptering för stödd kryptering och klartextbeteende i egenskapsströmmar