Třída TXLSFormulaDebugger
TXLSFormulaDebugger analyzuje vzorec v kontextu jednoho listu XLSX a vrací vlastněnou TXLSFormulaDebugSession
Relace kombinuje kompletní strom analyzovaných výrazů se skutečným pořadím vyhodnocení, mezihodnotami, souřadnicemi závislostí, vybranými odloženými větvemi, přeskočenými výrazy a prvním původem chyby
Volající vlastní a musí uvolnit každou relaci vrácenou metodou Analyze
Deklarace
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Členové relace
| Formula | Normalizovaný zdroj bez volitelného úvodního znaménka rovná se |
| FinalValue | Vypočtená skalární hodnota nebo standardní chyba vzorce typu Variant |
| Nodes | Analyzované uzly v pořadí rodič před dítětem |
| Dependencies | Závislosti buněk, rozsahů nebo definovaných názvů s vyřešenými souřadnicemi listu, jsou-li k dispozici |
| StepNodes | Uzly v deterministickém pořadí vyhodnocení, včetně přeskočených uzlů |
| CurrentNode | Uzel vybraný interaktivním navigačním kurzorem |
| ErrorOriginNodeId | Nejhlubší uzel, který způsobil konečnou chybu vzorce, nebo -1, když konečný výsledek není chyba |
| ErrorCode | Kód chyby Excelu nesený konečnou chybovou hodnotou |
| ErrorText | Zobrazovaný text Excelu, jako je #DIV/0! nebo #N/A |
Diagnostika uzlů
Každý TXLSFormulaDebugNode hlásí svého rodiče, hloubku, rozpětí zdroje, druh uzlu, operátor nebo název funkce, identifikátory operandů, hodnoty operandů, výslednou hodnotu, index vyhodnocení, stav, vybranou větev a podrobnosti chyby
Stav uzlu je fdsPending, fdsEvaluated, fdsSkipped nebo fdsError
Diagnostika větví rozlišuje větev IF true a false, cesty IFERROR nebo IFNA s hodnotou a náhradou a vybranou větev CHOOSE, IFS nebo SWITCH
Obnovené vnitřní chyby zůstávají viditelné na svých uzlech, i když je konečný výsledek vzorce platný
Navigace
MoveFirstvybere první krok vyhodnoceníMoveNextaMovePreviouspohybují aktuálním kurzorem bez přepočtuSeekNodevybere jeden uzel podle jeho stabilního identifikátoru v rámci relaceResetvymaže kurzor při zachování všech diagnostických informací
Příklad
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;