Clasa TXLSFormulaDebugger
TXLSFormulaDebugger analizează o formulă în contextul unei singure foi de lucru XLSX și returnează o TXLSFormulaDebugSession deținută
Sesiunea combină arborele complet de expresii analizat cu ordinea reală de evaluare, valorile intermediare, coordonatele dependențelor, ramurile leneșe selectate, expresiile sărite și originea primei erori
Apelantul deține și trebuie să elibereze fiecare sesiune returnată de Analyze
Declarație
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Membrii sesiunii
| Formula | Sursa normalizată fără semnul egal inițial opțional |
| FinalValue | Valoare scalară calculată sau eroare de formulă standard Variant |
| Nodes | Noduri analizate în ordine părinte-înainte-de-copil |
| Dependencies | Dependențe de celulă, interval sau nume definit, cu coordonate de foaie de lucru rezolvate atunci când sunt disponibile |
| StepNodes | Noduri în ordine deterministă de evaluare, inclusiv nodurile sărite |
| CurrentNode | Nodul selectat de cursorul interactiv de navigare |
| ErrorOriginNodeId | Cel mai profund nod care a generat eroarea finală a formulei, sau -1 atunci când rezultatul final nu este o eroare |
| ErrorCode | Codul de eroare Excel purtat de valoarea finală de eroare |
| ErrorText | Textul de afișare Excel, cum ar fi #DIV/0! sau #N/A |
Diagnosticare nod
Fiecare TXLSFormulaDebugNode raportează părintele său, adâncimea, intervalul sursă, tipul de nod, operatorul sau numele funcției, identificatorii nodurilor operanzilor, valorile operanzilor, valoarea rezultatului, indicele de evaluare, starea, ramura selectată și detaliile erorii
Starea nodului este fdsPending, fdsEvaluated, fdsSkipped sau fdsError
Diagnosticarea ramurilor distinge căile IF adevărată și falsă, căile IFERROR sau IFNA de valoare și de rezervă și ramura selectată CHOOSE, IFS sau SWITCH
Erorile interne recuperate rămân vizibile pe nodurile lor chiar și atunci când rezultatul final al formulei este valid
Navigare
MoveFirstselectează primul pas de evaluareMoveNextșiMovePreviousmută cursorul curent fără recalculareSeekNodeselectează un nod după identificatorul său stabil local sesiuniiResetșterge cursorul păstrând toate diagnosticările
Exemplu
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;