Classe TXLSFormulaDebugger
TXLSFormulaDebugger analizza una formula in un contesto di foglio di lavoro XLSX e restituisce un TXLSFormulaDebugSession di proprietà del chiamante
La sessione combina l'albero completo delle espressioni analizzato con l'ordine di valutazione effettivo, i valori intermedi, le coordinate delle dipendenze, i rami lazy selezionati, le espressioni saltate e l'origine del primo errore
Il chiamante possiede e deve liberare ogni sessione restituita da Analyze
Dichiarazione
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Membri della sessione
| Formula | Sorgente normalizzata senza l'eventuale segno di uguale iniziale |
| FinalValue | Valore scalare calcolato o errore di formula Variant standard |
| Nodes | Nodi analizzati in ordine padre-prima-del-figlio |
| Dependencies | Dipendenze di cella, intervallo o nome definito con coordinate di foglio risolte quando disponibili |
| StepNodes | Nodi in ordine deterministico di valutazione, inclusi i nodi saltati |
| CurrentNode | Nodo selezionato dal cursore di navigazione interattiva |
| ErrorOriginNodeId | Nodo più profondo che ha originato l'errore finale della formula, oppure -1 quando il risultato finale non è un errore |
| ErrorCode | Codice di errore Excel trasportato dal valore di errore finale |
| ErrorText | Testo di visualizzazione Excel come #DIV/0! o #N/A |
Diagnostica dei nodi
Ogni TXLSFormulaDebugNode riporta il proprio genitore, la profondità, l'estensione sorgente, il tipo di nodo, il nome di operatore o funzione, gli identificatori dei nodi operando, i valori degli operandi, il valore del risultato, l'indice di valutazione, lo stato, il ramo selezionato e i dettagli dell'errore
Lo stato del nodo è fdsPending, fdsEvaluated, fdsSkipped o fdsError
La diagnostica dei rami distingue i percorsi IF vero e falso, i percorsi IFERROR o IFNA di valore e fallback, e il ramo CHOOSE, IFS o SWITCH selezionato
Gli errori interni recuperati rimangono visibili sui loro nodi anche quando il risultato finale della formula è valido
Navigazione
MoveFirstseleziona il primo passaggio di valutazioneMoveNexteMovePreviousspostano il cursore corrente senza ricalcolareSeekNodeseleziona un nodo tramite il suo identificatore stabile locale alla sessioneResetazzera il cursore preservando tutta la diagnostica
Esempio
Debugger := TXLSFormulaDebugger.Create(Sheet);
try
Session := Debugger.Analyze('=IF(A1=0,42,B1/C1)');
try
if Session.MoveFirst then
repeat
Writeln(Session.CurrentNode.Source);
until not Session.MoveNext;
finally
Session.Free;
end;
finally
Debugger.Free;
end;