Documentazione HotXLS

Motore di calcolo Excel

Panoramica

HotXLS include un motore integrato per analizzare e calcolare le formule; questo motore valuta le formule delle celle a livello di codice all'interno del tuo processo, eliminando la necessità di richiamare Excel o controller OLE esterni per risolvere i valori calcolati della cartella di lavoro

Esecuzione del calcolo

Prima di salvare o esportare, attiva un ricalcolo completo della cartella di lavoro utilizzando l'interfaccia principale della cartella di lavoro

procedure Calculate;

Il motore supporta le famiglie di funzioni matematiche, di data, logiche, di stringa e statistiche standard; risolve in sequenza le dipendenze delle celle e segue le catene di riferimento per prevenire riferimenti circolari

Valutazione contestuale delle formule

TXLSWorksheet e TXLSXWorksheet espongono EvaluateFormulaAt per calcolare il testo di una formula in una riga e una colonna selezionate, in base uno, senza scrivere una cella temporanea né modificare lo stato di calcolo della cartella di lavoro

Stili di riferimento A1 e R1C1, nomi locali, riferimenti strutturati, dipendenze delle formule, radici di matrice, valori di errore Excel tipizzati, stato volatile, autorizzazione esplicita dei riferimenti esterni, annullamento e categorie di errore stabili condividono il valutatore normale della cartella di lavoro

CreateFormulaEvaluationTemplate compila una sola volta un'ancora immutabile e la riutilizza su più celle di destinazione; i riferimenti strutturati A1 sensibili alla riga di destinazione vengono risolti per ogni contesto di destinazione, e i limiti per singola chiamata vincolano lunghezza della formula, passi sugli elementi sintattici, profondità di ricorsione e byte di matrice generati

Vedere Valutazione contestuale delle formule per i tipi di risultato, i budget predefiniti, le regole di durata e gli esempi Delphi o C++Builder

Operatori di matrice

Gli operatori aritmetici, di confronto, di concatenazione, di negazione unaria e percentuale accettano matrici calcolate oltre ai valori scalari

Uno scalare viene propagato a ogni elemento, e una matrice di una sola riga o di una sola colonna viene propagata lungo la dimensione compatibile; le forme incompatibili restituiscono #VALUE!

Gli errori restano nelle rispettive celle del risultato, quindi una divisione per zero o un elemento non valido non scarta i valori calcolati per le celle restanti

COMBINA e PERMUTATIONA condividono la semantica scalare e con broadcast su matrici, con argomenti interi non negativi troncati e overflow verificato, mentre MUNIT restituisce una compatta matrice identità bidimensionale di Double

FormulaArrayMemoryLimit vale 64 MiB per impostazione predefinita e limita il payload delle matrici generate; MUNIT valida anche l'area spill rimanente del foglio di lavoro invece di imporre un tetto fisso di dimensione

Verifica della presenza delle formule

ISFORMULA(reference) verifica a chi appartiene la formula senza calcolare la cella referenziata, quindi una formula resta rilevabile anche quando il suo risultato in cache è un errore o una stringa vuota

Un intervallo rettangolare restituisce una matrice booleana della stessa forma; i membri di formule condivise e di formule matriciali classiche o XLSX restituiscono true, mentre di uno spill dinamico solo l'ancora è una cella con formula

I valori diretti e i nomi definiti scalari restituiscono #VALUE!, i riferimenti non validi conservano #REF!, e le matrici booleane generate sono limitate da FormulaArrayMemoryLimit

XLSX scrive _xlfn.ISFORMULA e ripristina il nome senza prefisso all'apertura, ODS usa la sintassi standard of:=ISFORMULA, e l'output XLS classico rifiuta la funzione future non supportata prima di scrivere i dati

Funzioni di testo moderne

UNICHAR tronca gli input numerici verso zero e converte i valori scalari Unicode validi in UTF-16, comprese le coppie surrogate per i piani supplementari e tutti gli intervalli a uso privato

Gli input a zero o fuori intervallo restituiscono #VALUE!, mentre i code point surrogate isolati e i noncharacter Unicode restituiscono #N/A; gli input da intervallo e da matrice generata conservano questi errori elemento per elemento

BAHTTEXT converte numeri finiti in testo di baht e satang thailandesi, arrotonda i valori intermedi lontano da zero con due cifre decimali, conserva il segno negativo quando la grandezza arrotondata diventa zero, ed espande la notazione scientifica senza passare per una conversione a tipo intero

XLSX salva UNICHAR come _xlfn.UNICHAR e ripristina il nome senza prefisso alla riapertura; BAHTTEXT usa la sua identità di funzione standard e resta senza prefisso nelle formule XLS e XLSX

Regressione e previsione

LINEST e LOGEST accettano una o più colonne o righe di predittori e restituiscono i coefficienti in ordine Excel seguiti dall'intercetta opzionale

Quando l'argomento delle statistiche è true, entrambe le funzioni restituiscono il risultato completo di cinque righe con gli errori dei coefficienti, le statistiche di adattamento, la statistica F, i gradi di libertà, la somma dei quadrati della regressione e la somma dei quadrati dei residui

TREND e GROWTH usano lo stesso modello multivariabile e conservano la forma a riga o a colonna dei nuovi valori dei predittori forniti

Ricalcolo delle dipendenze nell'XLS classico

TXLSWorkbook.Recalculate costruisce un grafo delle dipendenze delle formule alla prima chiamata e valuta le formule in ordine precedenza-prima, anziché nell'ordine fisico delle celle

Le chiamate successive riutilizzano il grafo e ricalcolano solo i dipendenti transitivi dei valori modificati, più le formule volatili; la modifica di formule, nomi, struttura dei fogli di lavoro e riscritture dei riferimenti invalida e ricostruisce il grafo in modo sicuro

I riferimenti circolari usano le impostazioni classiche della cartella di lavoro EnableIteration, MaxIterations e MaxIterationChange, mentre UseFullPrecision=False applica la precisione del numero visualizzato ai risultati in cache e ai loro calcoli a valle

Dipendenze dei nomi definiti

Il calcolo incrementale segue i nomi con ambito di cartella di lavoro e con ambito di foglio di lavoro attraverso formule annidate e riferimenti multi-area

Le formule dei nomi aciclici contribuiscono con le loro dipendenze di cella esatte, mentre i cicli di nomi ricorsivi ricadono in modo sicuro sul ricalcolo volatile

Tabelle dati What-If

Sia i fogli di lavoro XLS classici sia quelli XLSX moderni possono creare, calcolare, leggere, scrivere, copiare e regolare strutturalmente tabelle dati What-If a una o due variabili

function AddDataTable(
  const AResultRange, ARowInputCell, AColumnInputCell: WideString
): TXLSDataTable;

L'intervallo dei risultati contiene solo le celle di output calcolate, mentre formule e valori di prova usano le celle circostanti, con lo stesso layout di Excel

  • Tabella con input di colonna — lasciare vuoto ARowInputCell, mettere una formula di origine sopra ogni colonna dei risultati e i valori di prova a sinistra delle righe dei risultati
  • Tabella con input di riga — lasciare vuoto AColumnInputCell, mettere una formula di origine a sinistra di ogni riga dei risultati e i valori di prova sopra le colonne dei risultati
  • Tabella a due variabili — fornire entrambe le celle di input, mettere la formula di origine sopra e a sinistra dell'intervallo dei risultati, i valori di prova con input di riga sopra i risultati e i valori di prova con input di colonna a sinistra
Sheet.Range['B1', 'B1'].Value := 0;
Sheet.Range['D1', 'D1'].Formula := '=B1*2+1';
Sheet.Range['C2', 'C2'].Value := 1;
Sheet.Range['C3', 'C3'].Value := 2;
Sheet.Range['C4', 'C4'].Value := 3;

Table := Sheet.AddDataTable('D2:D4', '', 'B1');
Workbook.Recalculate;

Questo esempio con input di colonna calcola 3, 5 e 7 in D2:D4; ogni valore di prova viene applicato attraverso un contesto di calcolo isolato, quindi le formule che raggiungono B1 indirettamente, tramite altre celle con formula, vengono ricalcolate correttamente

AddDataTable restituisce nil per un intervallo non valido, per un riferimento di input non valido o quando entrambi i riferimenti di input sono vuoti; la raccolta DataTables del foglio di lavoro espone la definizione risultante e i relativi flag di input eliminato

L'eliminazione di una cella di input referenziata conserva la definizione della tabella e restituisce #REF! per i suoi output, in linea con la semantica della cartella di lavoro memorizzata

Funzioni definite dall'utente

Estendi il motore delle formule con logica di business personalizzata; registra le tue funzioni utilizzando gli eventi di seguito

I nomi esterni e in stile macro pericolosi vengono respinti prima che vengano eseguiti argomenti o gestori, a meno che la cartella di lavoro o la singola valutazione contestuale non abiliti esplicitamente AllowUnsafeFormulaCallbacks