TXLSFormulaDebugger klasa
TXLSFormulaDebugger analizira formulu u kontekstu jednog XLSX radnog lista i vraća TXLSFormulaDebugSession u vlasništvu objekta
Sesija kombinuje kompletno raščlanjeno stablo izraza sa stvarnim redosledom izračunavanja, međuvrednostima, koordinatama zavisnosti, izabranim lenjim granama, preskočenim izrazima i poreklom prve greške
Pozivalac poseduje svaku sesiju koju vrati Analyze i mora je osloboditi
Deklaracija
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Članovi sesije
| Formula | Normalizovani izvor bez opcionog vodećeg znaka jednakosti |
| FinalValue | Izračunata skalarna vrednost ili standardna Variant greška formule |
| Nodes | Raščlanjeni čvorovi u redosledu roditelj-pre-deteta |
| Dependencies | Zavisnosti ćelije, opsega ili definisanog imena sa razrešenim koordinatama radnog lista kada su dostupne |
| StepNodes | Čvorovi u determinističkom redosledu izračunavanja, uključujući preskočene čvorove |
| CurrentNode | Čvor izabran interaktivnim kursorom za navigaciju |
| ErrorOriginNodeId | Najdublji čvor koji je prouzrokovao konačnu grešku formule, ili -1 kada konačni rezultat nije greška |
| ErrorCode | Excel kod greške koji nosi konačna vrednost greške |
| ErrorText | Excel tekst prikaza kao što su #DIV/0! ili #N/A |
Dijagnostika čvorova
Svaki TXLSFormulaDebugNode izveštava o svom roditelju, dubini, rasponu izvora, vrsti čvora, imenu operatora ili funkcije, identifikatorima operanda, vrednostima operanda, vrednosti rezultata, indeksu izračunavanja, stanju, izabranoj grani i detaljima greške
Stanje čvora je fdsPending, fdsEvaluated, fdsSkipped ili fdsError
Dijagnostika grana razlikuje istinite i lažne IF putanje, putanje vrednosti i rezervne IFERROR ili IFNA putanje, kao i izabranu CHOOSE, IFS ili SWITCH granu
Oporavljene unutrašnje greške ostaju vidljive na svojim čvorovima čak i kada je konačni rezultat formule važeći
Navigacija
MoveFirstbira prvi korak izračunavanjaMoveNextiMovePreviouspomeraju trenutni kursor bez ponovnog izračunavanjaSeekNodebira jedan čvor po njegovom stabilnom identifikatoru lokalnom za sesijuResetčisti kursor uz čuvanje svih dijagnostika
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;