Documentazione HotXLS

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

FormulaSorgente normalizzata senza l'eventuale segno di uguale iniziale
FinalValueValore scalare calcolato o errore di formula Variant standard
NodesNodi analizzati in ordine padre-prima-del-figlio
DependenciesDipendenze di cella, intervallo o nome definito con coordinate di foglio risolte quando disponibili
StepNodesNodi in ordine deterministico di valutazione, inclusi i nodi saltati
CurrentNodeNodo selezionato dal cursore di navigazione interattiva
ErrorOriginNodeIdNodo più profondo che ha originato l'errore finale della formula, oppure -1 quando il risultato finale non è un errore
ErrorCodeCodice di errore Excel trasportato dal valore di errore finale
ErrorTextTesto 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

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;

Vedere anche