Klasa TXLSFormulaDebugger
TXLSFormulaDebugger analizira formulu u kontekstu jednog XLSX radnog lista i vraća sesiju TXLSFormulaDebugSession u vlasništvu pozivatelja
Sesija objedinjuje cijelo stablo raščlanjenih izraza sa stvarnim redoslijedom izračuna, međuvrijednostima, koordinatama ovisnosti, odabranim lijenim granama, preskočenim izrazima i izvorištem prve pogreške
Pozivatelj je vlasnik i mora osloboditi svaku sesiju koju vrati Analyze
Declarations
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Članovi sesije
| Formula | Normalizirani izvor bez opcionalnog vodećeg znaka jednakosti |
| FinalValue | Izračunata skalarna vrijednost ili standardna pogreška formule Variant |
| Nodes | Raščlanjeni čvorovi u redoslijedu roditelj-prije-djeteta |
| Dependencies | Ovisnosti o ćeliji, rasponu ili definiranom imenu s razriješenim koordinatama radnog lista kada su dostupne |
| StepNodes | Čvorovi u determinističkom redoslijedu izračuna, uključujući preskočene čvorove |
| CurrentNode | Čvor odabran interaktivnim pokazivačem navigacije |
| ErrorOriginNodeId | Najdublji čvor koji je izvorište konačne pogreške formule, ili -1 kada konačni rezultat nije pogreška |
| ErrorCode | Kod pogreške programa Excel koji nosi konačna vrijednost pogreške |
| ErrorText | Tekst prikaza programa Excel poput #DIV/0! ili #N/A |
Dijagnostika čvorova
Svaki TXLSFormulaDebugNode izvještava o svom roditelju, dubini, rasponu izvora, vrsti čvora, nazivu operatora ili funkcije, identifikatorima čvorova operanada, vrijednostima operanada, vrijednosti rezultata, indeksu izračuna, stanju, odabranoj grani i detaljima pogreške
Stanje čvora je fdsPending, fdsEvaluated, fdsSkipped ili fdsError
Dijagnostika grana razlikuje istinite i lažne putanje IF, putanje vrijednosti i zamjene IFERROR ili IFNA te odabranu granu CHOOSE, IFS ili SWITCH
Oporavljene unutarnje pogreške ostaju vidljive na svojim čvorovima čak i kada je konačni rezultat formule valjan
Navigacija
MoveFirstbira prvi korak izračunaMoveNextiMovePreviouspomiču trenutni pokazivač bez ponovnog izračunaSeekNodebira jedan čvor prema njegovom stabilnom identifikatoru unutar sesijeResetčisti pokazivač uz očuvanje svih dijagnostika
Primjer
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;