Documentazione HotXLS / Riferimento API

Archiviazione Compound File

lxCompoundFile legge e scrive contenitori Compound File Binary tramite stream Pascal, compresi ambiti di storage annidati, payload MiniFAT e settori DIFAT concatenati; le API native del workbook Classic BIFF8 usano questo backend su Linux e macOS

Per il lavoro sui fogli elettronici usa le normali chiamate Open e SaveAs del workbook; le API di livello più basso mostrate sotto sono utili per ispezionare stream annidati, costruire contenitori e preservare i metadati di storage

Leggere o costruire un contenitore

TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) carica i metadati di directory e allocazione; AOwnsStream vale False per impostazione predefinita, e lo stream sottostante deve restare disponibile mentre se ne estraggono i contenuti

CreateNew(AStream, AOwnsStream) prepara un nuovo contenitore, AddStorage e AddStream ne accodano i contenuti, e Save scrive un contenitore versione 3 con gli eventuali settori di estensione DIFAT richiesti

MembroComportamento
RootIndexL'identità della voce di directory radice, usata come genitore per storage e stream di primo livello
AddStorage(Name, ParentIndex)Accoda uno storage annidato e restituisce la sua identità di directory per aggiungere figli
AddStream(Name, Data)Accoda uno stream di byte a livello radice
AddStream(Name, Data, ParentIndex)Accoda uno stream di byte nell'ambito genitore selezionato e restituisce la sua identità
OpenStream(Name), OpenStream(Name, ParentIndex)Estraggono uno stream radice o di ambito in un TlxCfbStream di proprietà; uno stream mancante restituisce nil
OpenEntryStream(Index)Estrae lo stream di una voce di directory per identità; una voce non valida o non-stream restituisce nil
HasStream(Name), HasStream(Name, ParentIndex)Verificano la presenza dello stream nella radice o nell'ambito genitore selezionato
FindStorage(Name, ParentIndex)Restituisce l'identità di uno storage nel genitore selezionato, o -1 se non esiste storage corrispondente
EntryCount, Entries(Index)Ispezionano le voci di directory caricate; gli indici sono a base zero e devono essere validi
SetEntryMetadata(Index, Entry)Copia solo ID di classe, bit di stato e timestamp in una voce in coda valida o nella radice; le identità strutturali e i payload restano invariati

Il record TlxCfbEntry espone Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child e il ParentIndex derivato; i collegamenti di directory sono indici, e -1 indica un'identità assente

I suoi campi di metadati sono ClassID, StateBits, CreationTime e ModificationTime; i timestamp conservano i tick FILETIME grezzi dall'epoca UTC del 1601, non una data formattata secondo il locale

TlxCfbEntryType comprende cfbEmpty, cfbStorage, cfbStream e cfbRoot; TlxCfbStream espone Name, Size, Data, Read, Seek e CopyTo

Gli stream estratti possiedono byte scollegati e devono essere liberati dal chiamante; corruzione, catene incomplete, proprietà non valide e grafi ciclici di directory o allocazione vengono rifiutati invece di restituire payload troncati

lxCfbCompareNames(A, B) applica l'ordinamento length-first del Compound File Binary con una mappatura fissa in maiuscolo dei caratteri BMP semplici; i nomi duplicati sono ambiti al loro genitore, e nomi identici in storage annidati separati restano distinti

Interfacce di storage native

Sui target non Windows, lxOLE fornisce l'implementazione delle interfacce di storage richiesta dal caricamento e salvataggio del workbook Classic; le sue IStorage, IStream e IEnumStatStg conservano una proprietà esplicita delle interfacce e lo stato nativo scollegato del contenitore

Factory o helperContratto
XlsOpenCompoundStorage(Source, Storage)Carica un contenitore in sola lettura a partire dall'offset zero dello stream
XlsOpenCompoundStorage(Source, Start, Storage)Carica il contenitore a partire dall'offset esplicito non negativo
XlsCreateCompoundStorage(Storage)Crea uno storage nativo scrivibile con ambiti e stream annidati
XlsWriteCompoundStorage(Storage, Destination)Serializza lo storage radice nativo sullo stream fornito; implementazioni estranee e storage non radice vengono rifiutati
XlsFreeCompoundStorageName(Name)Libera i nomi nativi restituiti da statistiche o enumerazione dello storage; nil è accettato

Le factory restituiscono un HResult; verifica Succeeded(Result) prima di usare l'interfaccia restituita, e rilascia i riferimenti alle interfacce quando hai finito

La mutazione in sola lettura fallisce, i cursori di stream clonati conservano posizioni indipendenti, e le copie annidate preservano l'identità del genitore e i metadati supportati; la serializzazione diretta non fornisce il contratto transazionale di destinazione del workbook di livello superiore

Identificatori canonici del workbook

XlsIdentifierKeyText(const A: WideString): WideString in lxStandard restituisce la rappresentazione testuale UTF-16 della chiave di identificatore Unicode fissa esistente, permettendo allo storage dei nomi definiti Classic di condividere l'uguaglianza canonica con gli altri motori di workbook

Questa rappresentazione di chiave serve per identità e lookup, non per l'ortografia mostrata; i nomi creati restano invariati, e il comparatore di directory CFB conserva il proprio ordinamento separato imposto dal formato

Vedi il supporto Free Pascal per i requisiti di build nativi e il contratto verificato del workbook BIFF8, e la crittografia Classic per il comportamento supportato di crittografia e property-stream in chiaro