Documentazione HotXLS

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

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