TXLSFormulaDebugger class
TXLSFormulaDebugger analizira formulo v kontekstu enega delovnega lista XLSX in vrne sejo TXLSFormulaDebugSession v lasti klicatelja
Sesija združuje celotno razčlenjeno drevo izrazov z dejanskim vrstnim redom vrednotenja, vmesnimi vrednostmi, koordinatami odvisnosti, izbranimi lenimi vejami, preskočenimi izrazi in prvim izvorom napake
Klicatelj ima v lasti vsako sejo, ki jo vrne Analyze, in jo mora sprostiti
Deklaracija
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Člani sesije
| Formula | Normaliziran izvor brez neobveznega vodilnega enačaja |
| FinalValue | Izračunana skalarna vrednost ali standardna napaka formule Variant |
| Nodes | Razčlenjena vozlišča v vrstnem redu starš pred otrokom |
| Dependencies | Odvisnosti od celice, obsega ali definiranega sklica z razrešenimi koordinatami delovnega lista, kadar so na voljo |
| StepNodes | Vozlišča v determinističnem vrstnem redu vrednotenja, vključno s preskočenimi vozlišči |
| CurrentNode | Vozlišče, ki ga izbere interaktivni kurzor za krmarjenje |
| ErrorOriginNodeId | Najgloblje vozlišče, ki je povzročilo končno napako formule, ali -1, kadar končni rezultat ni napaka |
| ErrorCode | Koda napake programa Excel, ki jo nosi končna vrednost napake |
| ErrorText | Prikazano besedilo programa Excel, kot sta #DIV/0! ali #N/A |
Diagnostika vozlišč
Vsak TXLSFormulaDebugNode poroča svojega starša, globino, razpon izvora, vrsto vozlišča, ime operatorja ali funkcije, identifikatorje operandskih vozlišč, vrednosti operandov, vrednost rezultata, indeks vrednotenja, stanje, izbrano vejo in podatke o napakah
Stanje vozlišča je fdsPending, fdsEvaluated, fdsSkipped ali fdsError
Diagnostika vej loči poti IF za resnično in neresnično, poti vrednosti in rezerve IFERROR ali IFNA ter izbrano vejo CHOOSE, IFS ali SWITCH
Obnovljene notranje napake ostanejo vidne na svojih vozliščih, tudi kadar je končni rezultat formule veljaven
Krmarjenje
MoveFirstizbere prvi korak vrednotenjaMoveNextinMovePreviouspremakneta trenutni kurzor brez ponovnega računanjaSeekNodeizbere eno vozlišče po njegovem stabilnem identifikatorju, lokalnem za sejoResetpočisti kurzor ob ohranjanju vse diagnostike
Primer
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;