Documentazione HotXLS

Fedeltà di calcolo e conversione

Gli array calcolati si compongono attraverso funzioni di selezione, ordinamento, lookup, matrice e riformattazione, con proprietà automatica dello spill XLSX, destinazioni CSE esplicite e risorse di valutazione limitate

Array dinamici ed array CSE espliciti

Assegna un'espressione che produce un array a una singola TXLSXCell.Formula e chiama TXLSXWorkbook.Recalculate; il risultato possiede uno spill rettangolare ancorato a quella cella, incluse formule come SEQUENCE(3,2), A1:A3*10, costanti di array e risultati LET con valore di array

Sheet.Cells.Item[1, 1].Formula := 'SEQUENCE(3,2)';
Sheet.Cells.Item[1, 4].Formula := 'SUM(A1#)';
Workbook.Recalculate;

Il ricalcolo ingrandisce o riduce il risultato, cancella solo i follower obsoleti di proprietà dell'ancoraggio e ricostruisce le dipendenze quando l'estensione cambia; i riferimenti ai follower appena creati e l'operatore spill A1# usano l'estensione corrente

Valori esistenti, formule, rich text, altri array, intervalli uniti, tabelle e i confini del foglio di lavoro ostacolano uno spill e producono #SPILL!; gli stili su celle altrimenti vuote restano utilizzabili, e la rimozione di un ostacolo permette al ricalcolo successivo di riprovare l'ancoraggio

Modificare un follower con un valore o rich text scollega quella cella dall'ancoraggio, così il calcolo successivo preserva la modifica come ostacolo; rimuovere o svuotare l'ancoraggio rilascia i suoi follower di proprietà, mentre ConvertFormulasToValues conserva i loro valori calcolati come celle ordinarie

Il salvataggio XLSX registra l'estensione corrente dell'array e i metadati, e il caricamento ripristina la proprietà dei follower già in cache prima del ricalcolo; le formule ad array che contengono errori conservano comunque la loro estensione quando gli errori appartengono a singoli elementi

SetArrayFormula resta il punto di ingresso CSE esplicito a intervallo fisso in entrambi i motori di workbook; l'aritmetica grezza sugli intervalli valuta elemento per elemento dentro quell'intervallo, mentre le formule scalari ordinarie conservano l'intersezione implicita

L'operatore unario @ interseca un riferimento con la cella della formula e prende il primo elemento di un array calcolato; SINGLE e ANCHORARRAY sono alias di archiviazione accettati per intersezione implicita e riferimenti spill

MAP accetta più array di input e una lista di parametri LAMBDA corrispondente, propaga gli errori degli elementi e rifiuta risultati di array annidati con #CALC!; FILTER accetta array calcolati e maschere per riga o colonna, inclusa la propagazione degli errori e un #CALC! a risultato vuoto quando non viene fornito un fallback

La mutazione di spill dinamici viene eseguita in serie anche quando sono configurati più thread di calcolo; la stabilizzazione dell'estensione è limitata a 32 passate, e gli array dinamici nei calcoli iterativi circolari vengono rifiutati invece di essere trattati come risultati scalari

INDEX accetta riferimenti, costanti di array e array calcolati; quando entrambi i selettori sono scalari, i selettori di riga e colonna positivi restituiscono un valore, un selettore zero restituisce la riga o colonna selezionata, e due selettori zero restituiscono l'array completo; una sorgente per riferimento con selettori scalari conserva il comportamento per riferimento verso consumatori come ROW e ISREF

Anche i selettori di riga e colonna possono essere array, incluse costanti, vettori calcolati, valori di intervallo e binding LET; orientamenti di riga e colonna opposti vanno in broadcasting verso un prodotto incrociato rettangolare, mentre orientamenti corrispondenti selezionano posizioni accoppiate; le dimensioni singleton vanno in broadcasting, e le posizioni mancanti in dimensioni disuguali restituiscono singoli valori #N/A

Quando uno dei selettori è un array, un selettore zero o omesso sceglie il primo membro di quell'asse invece di espandere un'intera riga o colonna; i selettori frazionari troncano verso zero, i selettori negativi restituiscono singoli valori #VALUE! prima del troncamento, e i selettori oltre i confini della sorgente restituiscono singoli valori #REF!; le stringhe selezionate, i valori Boolean e gli errori tipizzati conservano i loro tipi

SORT e UNIQUE accettano intervalli, costanti e array calcolati, inclusi risultati annidati di FILTER, SEQUENCE e LET; orientamento per riga o colonna, ordinamento crescente o decrescente, ordinamento per prima occorrenza e deduplicazione solo-una-volta seguono lo stesso contratto per ciascuna forma di sorgente

I nomi definiti del workbook possono fornire sorgenti per riferimento, scalari o ad array calcolati; ISREF(INDEX(...)) distingue un risultato effettivamente per riferimento da un valore calcolato denominato; i selettori scalari di INDEX e le opzioni numeriche di SORT troncano i valori frazionari, e gli argomenti Boolean opzionali rifiutano testo diverso da TRUE o FALSE

Sheet.Cells.Item[1, 6].Formula := 'SORT(UNIQUE(FILTER(A1:B5,A1:A5>1)),1,-1)';
Sheet.Cells.Item[1, 9].Formula := 'INDEX(SORT(UNIQUE(A1:B5)),0,2)';
Sheet.Cells.Item[1, 12].Formula := 'INDEX(SEQUENCE(2,3,10,2),2,3)';
Workbook.Recalculate;
Sheet.Cells.Item[1, 1].Formula := 'INDEX(SEQUENCE(3,3),{1;3},{1,3})';
Workbook.Recalculate;

Questo esempio di selettori espande {1,3;7,9} in un risultato due-per-due; INDEX(SEQUENCE(3,3),{1;3},{1;3}) restituisce invece la colonna accoppiata {1;9}; i selettori ad array producono valori anche quando la sorgente è un riferimento, mentre i selettori scalari per riferimento conservano l'identità del riferimento

Queste espressioni possono espandersi e ridimensionarsi in XLSX o valutare dentro una destinazione CSE esplicita; gli errori delle sorgenti ad array restano tipizzati e un risultato solo-una-volta vuoto restituisce #CALC!; gli output dei selettori consumano il budget di step di valutazione, e i payload combinati di sorgente, selettori e matrice risultato vengono verificati rispetto al budget di memoria per array

INDEX accetta un esplicito quarto argomento area_num pari a 1 per una sorgente calcolata, e i selettori di riga, colonna e area possono andare insieme in broadcasting su un'unione di riferimenti supportata sullo stesso foglio; i riferimenti reali multi-area conservano l'identità attraverso nomi definiti locali e LET, mentre lo CHOOSE scalare conserva il riferimento selezionato, compresa una scelta su un altro foglio; i risultati dei selettori ad array sono valori, non array di riferimenti annidati; vedi selezione di aree con INDEX e identità dei riferimenti per le regole su zero, omissione, coercizione ed errori

Per il calcolo standalone, TXLSCalculator.OnGetSpillRange accetta una callback TXLSGetSpillRange che risolve i confini inclusivi correnti di un ancoraggio; i valutatori basati su workbook installano questa callback automaticamente

TXLSGetSpillRange = function(SheetIndex, AnchorRow, AnchorCol: Integer;
  var LastRow, LastCol: Integer): Integer of object;

lxNormalizeStorageFormula normalizza la sintassi delle formule scritte per OOXML, lxTryStorageFormulaOperators traduce gli operatori spill e di intersezione implicita, e lxApplyXlfnPrefix applica i prefissi richiesti per le funzioni future; i separatori di testo protetto e di righe di array restano intatti, e l'assegnazione di una formula conserva in memoria il testo del chiamante

Il salvataggio non cambia l'espressione scritta in memoria; la riapertura di formule XLSX appena scritte restituisce la sintassi di archiviazione canonica con argomenti separati da virgola e nessun = iniziale, in coerenza con le importazioni native di Excel; l'XML di formule importate invariato conserva il suo percorso di preservazione esistente

Composizione di lookup, matrice e riformattazione

TRANSPOSE accetta riferimenti, costanti e array calcolati preservando testo, valori Boolean ed errori singoli; le celle vuote della sorgente diventano zero numerico

MMULT, MDETERM e MINVERSE accettano matrici calcolate ed espressioni annidate come MMULT(MUNIT(2),SEQUENCE(2,2)); le loro entrate di matrice devono essere numeriche, con testo, valori Boolean e vuoti rifiutati invece che forzati, e gli errori della sorgente che conservano i loro codici di errore

CHOOSECOLS e CHOOSEROWS accettano vettori di selettori scalari o monodimensionali, concatenano i selettori in ordine di argomento, conservano i duplicati e contano gli indici negativi dalla fine; i selettori frazionari troncano verso zero, i selettori zero e fuori intervallo vengono rifiutati, e le matrici di selettori bidimensionali non sono supportate

XLOOKUP, XMATCH e MATCH accettano vettori di lookup calcolati e richieste di lookup con valore di array; le chiavi devono occupare una riga o una colonna, e gli array restituiti da XLOOKUP devono allinearsi a quell'asse di lookup

Uno XLOOKUP scalare può restituire un'intera riga o colonna corrispondente, errori tipizzati inclusi; una richiesta di lookup con valore di array conserva la sua forma e prende la prima componente di ogni slice corrispondente o array di fallback

Le scansioni di lookup esatto saltano le voci di errore nel vettore delle chiavi; chiavi Boolean, numeriche e testuali restano distinte, mentre i percorsi scalari ordinari per riferimento conservano il loro comportamento esistente di streaming e cache di ricalcolo; le modalità di ricerca binaria richiedono ancora chiavi correttamente ordinate

VSTACK, HSTACK, TAKE, DROP, TOROW, TOCOL, WRAPROWS, WRAPCOLS e EXPAND accettano input calcolati e padding tipizzato; un risultato senza righe o colonne restituisce #CALC!, e il wrapping richiede un input monodimensionale

Lavoro su matrici, scansione di lookup, attraversamento dei selettori, copia e padding consumano il budget di step di valutazione; i payload simultaneamente trattenuti di input, lavoro e output delle matrici vengono verificati rispetto al limite configurato di memoria per array prima dell'allocazione

Sheet.Cells.Item[1, 1].Formula := 'XLOOKUP({1;3},SEQUENCE(3),SEQUENCE(3,2))';
Sheet.Cells.Item[1, 4].Formula := 'CHOOSECOLS(SEQUENCE(2,3),{-1;1})';
Sheet.Cells.Item[1, 7].Formula := 'TRANSPOSE(UNIQUE({"A";"B";"A"}))';
Workbook.Recalculate;

Errori di calcolo moderni tipizzati

#SPILL! e #CALC! restano errori di cella tipizzati attraverso calcolo, visualizzazione, ispezione della cache e riapertura XLSX; l'output XLSX trasporta i loro metadati rich-value conservando il fallback standard di errore in cache per i reader che non conoscono quell'estensione

I risultati testuali delle formule, inclusi i follower CSE e ad array dinamici, usano cache di stringhe letterali così Excel può mostrarli prima del ricalcolo; le celle di valore semplici continuano a usare le shared strings

L'output moderno rich-error include la versione del workbook e le dichiarazioni della funzionalità di calcolo Rich Data richieste da Excel per interpretare quelle cache prima del ricalcolo; il calcId emesso è almeno 191029, preservando valori richiesti più alti senza cambiare la proprietà CalcId del workbook in memoria

I metadati di celle e valori importati, le strutture rich-value non correlate e i bucket opachi conservano le loro identità originali quando nuovi bucket di errore vengono aggiunti; sostituire una cella di errore cancella i metadati tipizzati di errore obsoleti al salvataggio

TXLSXRichErrorCodes è il tipo array di interi usato per i bucket rich-error decodificati; il codice applicativo legge gli errori tipizzati dal valore Variant della cella

BIFF8 non può rappresentare fedelmente questi errori moderni né gli operatori spill; il serializzatore Classic rifiuta le rappresentazioni moderne non supportate invece di assegnare un codice di errore legacy non correlato

Preflight di conversione

TXLSXWorkbook.GetConversionReport restituisce un TXLSConversionReport di proprietà del chiamante senza ricalcolare né cambiare il workbook; i tipi sono dichiarati in lxDiagnostics

Report := Workbook.GetConversionReport(xlsConversionOpenDocument);
try
  for I := 0 to Report.Count - 1 do
    InspectIssue(Report.Items[I]);
finally
  Report.Free;
end;
TargetxlsConversionOpenXmlWorkbook, xlsConversionOpenXmlTemplate, xlsConversionMacroEnabledTemplate, xlsConversionOpenDocument, xlsConversionExcel97Workbook, o xlsConversionExcelBinaryWorkbook
FidelityTXLSConversionFidelity: xlsConversionPreserved, xlsConversionDegraded, xlsConversionDropped, o xlsConversionUnsupported
IssueTXLSConversionIssue espone Feature, Fidelity, SheetIndex, SheetName, Location e Message; HasLoss comprende le voci degradate, eliminate e non supportate

Il report inventaria le perdite di formato note come VBA, protezione, viste del workbook, connessioni, tabelle di query, commenti, collegamenti esterni, XML map, struttura delle tabelle, criteri di filtro, disegni, cache di errori tipizzati, sintassi di validazione o formule non supportate, proprietà degli array e parti di estensione opache; descrive i percorsi di conversione implementati e non certifica ogni funzionalità in ogni applicazione esterna

ODS conserva le celle ordinarie delle tabelle, i risultati delle formule in cache, il testo e gli autori delle annotazioni supportate, la protezione dei fogli senza password e i filtri rappresentabili, perdendo l'oggetto tabella Excel, la geometria più ricca dei grafici o semantiche di regole non supportate; un payload opaco di preservazione OOXML viene segnalato come eliminato quando il target non può trasportarlo

La facciata XLSX segnala l'output BIFF8 come non supportato; per i flussi di lavoro BIFF supportati usa l'API del workbook Classic; la versione 2.384.93 aggiunge un backend XLSB limitato per valori e stili che rifiuta formule, oggetti di funzionalità, metadati e impostazioni di calcolo non rappresentati, sia nei salvataggi controllati che in quelli non controllati

Salvataggio controllato

Status := Workbook.SaveAsChecked(Stream,
  xlsxOpenDocumentSpreadsheet, False);

Gli overload su file e stream eseguono il preflight delle perdite note prima della scrittura; AllowLossy=False rifiuta le funzionalità degradate o eliminate con diagnostiche di conversione, mentre AllowLossy=True accetta esplicitamente quelle perdite e rifiuta comunque le conversioni non supportate

Un preflight rifiutato lascia invariati i byte di destinazione e la posizione dello stream; le richieste riuscite usano la transazione di salvataggio esistente e restituiscono le stesse convenzioni di stato di salvataggio di SaveAs

Il SaveAs ordinario resta disponibile con il suo comportamento esistente; le applicazioni che richiedono una decisione esplicita sulle perdite dovrebbero esaminare il report e usare il salvataggio controllato

Formati modello

xlsxOpenXMLTemplate seleziona XLTX senza macro, mentre xlsxOpenXMLMacroEnabledTemplate seleziona XLTM e preserva un progetto VBA esistente; il formato è esplicito e non viene inferito da un'estensione di file o da un modello importato

XLTX senza macro rifiuta un workbook con VBA anche quando il salvataggio controllato con perdite è abilitato; un pacchetto XLTM può essere emesso senza progetto VBA, e HotXLS non crea codice VBA

Formule di convalida ODS

La convalida Boolean personalizzata usa of:is-true-formula(...); limiti scalari supportati, sorgenti di elenco, riferimenti A1 qualificati, stringhe e separatori di argomenti supportati vengono tradotti in OpenFormula e ribasati sull'indirizzo della cella base di convalida all'importazione

Le espressioni di convalida strutturate, esterne o tridimensionali non supportate vengono omesse insieme ai loro riferimenti di cella, evitando definizioni di convalida orfane; il preflight di conversione segnala le regole omesse

Annotazioni, protezione e filtri ODS

I commenti ordinari alle celle vengono esportati come annotazioni OpenDocument con testo e autore, comprese note vuote, tab, spazi e interruzioni di riga; le note su celle altrimenti assenti e su coordinate lontane usano sequenze sparse ripetute di righe e colonne senza creare celle del foglio di lavoro

Un commento sulla cella di ancoraggio di un intervallo unito conserva il suo indirizzo; una nota su una cella coperta o fuori dalla griglia del foglio viene segnalata come eliminata; il testo formattato dei commenti viene appiattito al testo mostrato, e i report di conversione identificano la perdita dello stile dei run, delle dimensioni personalizzate del box e della presentazione sempre visibile

Il flag protetto di OpenDocument e gli stili di cella bloccata o sbloccata supportati vengono conservati; il sottoinsieme di fogli di lavoro senza perdite non usa password né eccezioni di intervalli modificabili e consente solo la selezione di celle bloccate e sbloccate

Sheet.Protect;
Sheet.SheetProtectionOptions :=
  [xlsxSpoSelectLockedCells, xlsxSpoSelectUnlockedCells];
Sheet.Range['B2:B100'].Locked := False;

Gli hash delle password Excel, le impostazioni moderne delle password, gli intervalli modificabili e i permessi di azione fuori da quel sottoinsieme vengono segnalati come degradati mentre il flag protetto resta; anche l'ampio set di permessi predefinito di Excel richiede una decisione esplicita sulle perdite

L'importazione OpenDocument conserva il flag protetto e gli stili di blocco delle celle; gli hash delle password nativi non vengono convertiti in hash Excel, e i metadati dei permessi importati non rappresentati restano una perdita nominata nei successivi report di conversione

L'esportazione AutoFilter supporta sei operatori di confronto scalari, fino a due condizioni scalari per colonna unite con AND o OR, e un AND tra colonne; gli elenchi supportati di selezione di valori semplici e le selezioni vuote non hanno limite di due valori e restano metadati di filtro nativi

I criteri scalari numerici usano valori finiti invarianti; le selezioni testuali conservano i loro caratteri letterali, inclusi i caratteri jolly dentro gli elenchi di selezione, mentre le espressioni con caratteri jolly nei filtri personalizzati, i criteri Boolean ambigui, i gruppi di date, le date dinamiche e i filtri per colore e icona non hanno una conversione supportata equivalente

Le espressioni di filtro non supportate vengono omesse come espressione completa invece di indebolire le condizioni selezionate; l'intervallo del filtro resta, e il report di conversione identifica i criteri omessi

I salvataggi su stream ODS preparano il pacchetto completo in un file temporaneo registrato prima di scrivere alla posizione originale della destinazione; i byte di prefisso esistenti e gli offset ZIP assoluti vengono conservati, comprese posizioni oltre la fine originale; un annullamento o un'eccezione della callback di avanzamento prima del commit preserva byte, dimensione e posizione della destinazione e rilascia il file temporaneo; la notifica finale di scrittura resta non annullabile

L'importazione OpenDocument supporta le stesse congiunzioni scalari e le stesse disgiunzioni testuali o insiemi di valori sulla stessa colonna; l'OR tra colonne, le espressioni regolari, i confronti sensibili alle maiuscole e gli operatori di filtro nativi non supportati restano perdite importate esplicite

TXLSXOdsImportLoss e TXLSXOdsImportLosses descrivono le categorie private di provenienza del foglio di lavoro; i report di conversione usano ImportedOdsProtectionPassword, ImportedOdsProtectionOptions, ImportedOdsFilterCriteria e ImportedOdsCommentFormatting; sopravvivono alla copia dei fogli di lavoro e compaiono sia per i target di conversione OpenDocument che Open XML

La conversione dei filtri conserva metadati e visibilità esistente delle righe senza applicare filtri né ricalcolare celle; le applicazioni native restano responsabili del loro comportamento di filtraggio e modifica

Flussi di lavoro correlati