Trieda TXLSFormulaDebugger
TXLSFormulaDebugger analyzuje vzorec v kontexte jedného XLSX hárka a vracia vlastnenú TXLSFormulaDebugSession
Relácia kombinuje kompletný parsovaný výrazový strom so skutočným poradím vyhodnotenia, medzihodnotami, súradnicami závislostí, vybranými odloženými vetvami, preskočenými výrazmi a prvým pôvodom chyby
Volajúci vlastní a musí uvoľniť každú reláciu vrátenú Analyze
Deklarácia
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Členy relácie
| Formula | Normalizovaný zdroj bez voliteľného úvodného znaku rovná sa |
| FinalValue | Vypočítaná skalárna hodnota alebo štandardná chyba vzorca Variant |
| Nodes | Parsované uzly v poradí rodič-pred-potomkom |
| Dependencies | Závislosti buniek, rozsahov alebo pomenovaných názvov s vyriešenými súradnicami hárka, ak sú dostupné |
| StepNodes | Uzly v deterministickom poradí vyhodnotenia vrátane preskočených uzlov |
| CurrentNode | Uzol vybraný interaktívnym navigačným kurzorom |
| ErrorOriginNodeId | Najhlbší uzol, z ktorého pochádza konečná chyba vzorca, alebo -1, keď konečný výsledok nie je chyba |
| ErrorCode | Kód chyby Excelu nesený konečnou hodnotou chyby |
| ErrorText | Zobrazovaný text Excelu, napríklad #DIV/0! alebo #N/A |
Diagnostika uzlov
Každý TXLSFormulaDebugNode hlási svoj rodič, hĺbku, rozsah zdroja, druh uzla, názov operátora alebo funkcie, identifikátory operandov, hodnoty operandov, výslednú hodnotu, index vyhodnotenia, stav, vybranú vetvu a podrobnosti o chybe
Stav uzla je fdsPending, fdsEvaluated, fdsSkipped alebo fdsError
Diagnostika vetiev rozlišuje pravdivé a nepravdivé cesty IF, cesty hodnoty a fallbacku IFERROR alebo IFNA a vybranú vetvu CHOOSE, IFS alebo SWITCH
Obnovené vnútorné chyby zostávajú viditeľné na svojich uzloch, aj keď je konečný výsledok vzorca platný
Navigácia
MoveFirstvyberie prvý krok vyhodnoteniaMoveNextaMovePreviouspresúvajú aktuálny kurzor bez prepočítavaniaSeekNodevyberie jeden uzol podľa jeho stabilného identifikátora v rámci relácieResetvymaže kurzor pri zachovaní všetkých diagnostík
Prí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;