Formule e oggetti del foglio in XLSB
La facciata del workbook XLSX legge e scrive un sottoinsieme XLSB validato con valori tipizzati, formule ordinarie in cache, nomi, stili comuni e oggetti del foglio rappresentati; lo stato non rappresentato viene rifiutato prima dell'output verso la destinazione
Aprire e salvare
if Workbook.Open('values.xlsb') <> 1 then
raise Exception.Create('XLSB input is unsupported or invalid');
if Workbook.SaveAsChecked('values-copy.xlsb', xlsxExcelBinaryWorkbook) <> 1 then
raise Exception.Create('XLSB output is unsupported or failed');
Open rileva il contenuto e il tipo registrato della parte del workbook; l'input binario riuscito imposta SourceFormat=xlsxExcelBinaryWorkbook, mentre gli originali quattro ordinali di TXLSXFileFormat restano invariati e il nuovo membro ha ordinale 4
Gli overload su file e stream di SaveAs e SaveAsChecked accettano esplicitamente il formato binario; il salvataggio predefinito seleziona comunque il formato ordinario di workbook Open XML indipendentemente dall'estensione del nome file
GetConversionReport(xlsConversionExcelBinaryWorkbook) ispeziona lo stato corrente senza espandere lo storage compattato delle celle; le voci non supportate restano fallimenti obbligatori anche per il salvataggio non controllato o con AllowLossy=True
Stato supportato
- Fogli di lavoro ordinari, nomi e stringhe Unicode, numeri, valori Boolean, celle vuote e vuote con stile, e valori di errore ordinari rappresentabili
- Input di shared e inline string, record nativi compatti numerici e a cella corta, visibilità dei fogli, flag del sistema di data, viste e selezioni ordinarie del workbook e dei fogli
- Font comuni, riempimenti a motivo, bordi per lato, formati numerici, riferimenti ai formati di cella, flag di allineamento e protezione, e colori RGB, tema e indicizzati rappresentati
- Altezze di riga, larghezze di colonna, flag di dimensione supportati e margini di pagina
- Formule di cella ordinarie con token di funzioni legacy supportati, operatori scalari, riferimenti A1, riferimenti a foglio singolo nello stesso workbook e nomi del workbook o del foglio, con cache numeriche, di stringa, Boolean e di errori ordinari
- Nomi definiti globali e con ambito foglio, flag e commenti dei nomi nascosti, celle unite, collegamenti ipertestuali esterni e interni ordinari, riquadri divisi o bloccati e selezioni dei riquadri
- Intervalli AutoFilter, confronti personalizzati scalari con uno o due criteri AND/OR, ed elenchi arbitrari di valori selezionati con un'opzionale selezione vuota
- Tabelle ordinarie del foglio con identità, intervallo, visibilità di intestazione e riga dei totali, identità e didascalie delle colonne, etichette letterali della riga dei totali, criteri AutoFilter rappresentati e flag degli stili di tabella incorporati
- Compressione ZIP configurata e timestamp ZIP deterministici tramite le opzioni esistenti del workbook
Il report di conversione copre le funzionalità del modello attivo, e la validazione completa del pacchetto resta l'ultima barriera per riferimenti non validi, record malformati, attributi sconosciuti o contenuti trattenuti non supportati
L'importazione binaria conserva il font predefinito esplicito del file e i formati numerici incorporati supportati, celle vuote con stile comprese; i formati numerici dipendenti dal locale richiedono un codice di formato esplicito, così il reader non indovina la formattazione regionale
Confini espliciti
Record di formule condivise, proprietà di array e array dinamici, costanti di array e funzioni che restituiscono array, funzioni future, funzioni definite dall'utente, riferimenti a workbook esterni e multi-foglio, VBA, connessioni dati esterne, PivotTable e Slicer, grafici e disegni, commenti e rich text, convalida, formattazione condizionale e metadati avanzati di pagina o estensione restano fuori da questo backend
Colonne calcolate delle tabelle, formule di aggregazione dei totali, stato di ordinamento, formattazione differenziale o personalizzata delle tabelle, tabelle legate a query e XML map vengono rifiutati; vengono rifiutati anche i filtri per colore, icona, dinamici e a gruppi di date, i criteri personalizzati Boolean nativi tipizzati, i criteri personalizzati nativi stringa dall'aspetto numerico e gli override della visibilità dei pulsanti di filtro
I criteri di filtro non personalizzati importati dei fogli vengono conservati come RawXml; i confronti personalizzati popolano le proprietà tipizzate esistenti dei criteri, mentre i valori selezionati e la selezione vuota restano un criterio supportato da XML invece di una nuova API tipizzata di elenchi di valori
La conversione dei token delle formule preserva semantica e flag dei riferimenti; può normalizzare il testo delle formule con parentesi e nomi di foglio tra virgolette, quindi non viene promessa un'identità testuale byte per byte
L'output delle formule richiede una cache esplicita numerica, di stringa, Boolean o di errore ordinario; una cache mancante viene rifiutata quando la politica di salvataggio non ricalcolerà, incluso xrmManual e un grafo delle dipendenze pulito con xrmIfDirty; le applicazioni possono chiamare Recalculate o selezionare xrmAlways prima di salvare, e la stringa vuota, False e lo zero numerico sono cache valide
Le proprietà di calcolo devono usare i predefiniti supportati; calcolo manuale, iterazione, precisione ridotta, modalità di riferimento alternativa, calcolo forzato o incompleto, configurazione esplicita dei thread e altre impostazioni significative non predefinite vengono rifiutate
Catene di calcolo e indici di cella binari sono metadati rigenerati e non vengono copiati attraverso il bridge dei pacchetti; record o relazioni di funzionalità sconosciuti restano fallimenti invece di diventare parti Open XML fabbricate
L'input binario richiede il caricamento eager dell'intero foglio; MetadataOnly e una lista SelectedSheets non vuota vengono rifiutati prima di sostituire il modello esistente, perché il caricamento lazy richiederebbe un archivio convertito trattenuto
Garanzie di fallimento e proprietà
I pacchetti binari vengono validati e convertiti prima che il parser XML ordinario azzeri il workbook; input non supportato, contenuto binario malformato, modalità di lettura rifiutate e annullamento della conversione preservano gli oggetti esistenti del foglio, il nome del file, il formato sorgente e il collegamento all'archivio sorgente
Dopo che la conversione binaria validata entra nel parser XML esistente, i fallimenti tardivi di analisi XML o delle callback dell'applicazione seguono il normale ciclo di vita di apertura XML; la garanzia di preflight non promette il rollback delle scritture arbitrarie delle callback
Il salvataggio prepara in staging l'intero pacchetto binario; l'output su file usa un file temporaneo sibling e una singola sostituzione finale, e l'output su stream leggibile e seekable conserva uno snapshot di byte, dimensione e posizione per il rollback dopo un fallimento del commit
LastSaveUsedStreaming=False riflette lo staging binario completo anche quando il writer XML intermedio fa streaming; la memoria comprende le parti convertite e il pacchetto completo, quindi questo backend non è un writer in streaming a memoria limitata
Report di conversione e preflight conservano lo storage compattato delle celle, incluso un misto di valori compattati e formule materializzate; un salvataggio riuscito può espandere i valori compattati attraverso la preparazione esistente degli stili e il writer dei fogli, quindi la purezza del report non implica un'operazione di salvataggio immutabile o non materializzante
Il salvataggio binario riuscito su file cancella i collegamenti precedenti alle sorgenti XML grezze; il salvataggio su stream conserva il comportamento dei nomi di file, e l'annullamento viene verificato prima del commit sulla destinazione
API di conversione dei pacchetti
procedure XlsbToOpenXml(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); procedure OpenXmlToXlsb(Source: TZipArchive; Destination: TStream; CancelCheck: TXLSStreamCancelCheck = nil; EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0); function XlsbStylesToXml(const Data: AnsiString): AnsiString; function XlsbStylesFromXml(const Data: AnsiString): AnsiString; function XlsbStringsToXml(const Data: AnsiString): AnsiString; function XlsbStringsFromXml(const Data: AnsiString): AnsiString;
TXlsbFormulaValidator.Create(WorkbookXml) valida il contesto dei nomi del workbook e Validate(FormulaText, SheetIndex) valida una formula senza accesso alle celle del foglio; SheetIndex è a base zero e il validatore è di proprietà del chiamante
XlsbValidateTableXml(Data) e XlsbValidateAutoFilterXml(Data) validano l'XML degli oggetti UTF-8 contro gli stessi contratti di encoder usati dall'output del pacchetto; i fallimenti sollevano le eccezioni esistenti di formato o funzionalità non supportata
Queste API di lxXlsb conservano la proprietà del chiamante; la conversione del pacchetto valida e prepara in staging tutte le parti prima di sostituire Destination dall'offset zero, e i bridge delle parti principali usano XML UTF-8 e byte binari grezzi
EXlsbUnsupported deriva da EXlsbFormatError e distingue il rifiuto atteso del sottoinsieme dai dati malformati; l'annullamento solleva l'eccezione consolidata di annullamento dello stream prima del commit
La compressione accetta da -1 a 9, e la data fissa accetta zero o una data finita rappresentabile in DOS dal 1980 al 2107; opzioni non valide vengono rifiutate prima di cambiare la destinazione