TXLSFormulaDebugger klasė
TXLSFormulaDebugger analizuoja formulę viename XLSX darbalapio kontekste ir grąžina nuosavybės teise valdomą TXLSFormulaDebugSession
Sesija sujungia pilną išanalizuotą išraiškos medį su faktine vertinimo tvarka, tarpinėmis reikšmėmis, priklausomybių koordinatėmis, pasirinktomis vėluojančiomis šakomis, praleistomis išraiškomis ir pirmosios klaidos kilme
Skambintojas valdo ir turi atlaisvinti kiekvieną Analyze grąžintą sesiją
Deklaracija
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Sesijos nariai
| Formula | Normalizuotas šaltinis be pasirinktinio pirmojo lygybės ženklo |
| FinalValue | Apskaičiuota skaliarinė reikšmė arba standartinė Variant formulės klaida |
| Nodes | Išanalizuoti mazgai tvarka „pirminis prieš vaikinį“ |
| Dependencies | Langelio, diapazono arba apibrėžto pavadinimo priklausomybės su išspręstomis darbalapio koordinatėmis, kai jos prieinamos |
| StepNodes | Mazgai deterministine vertinimo tvarka, įskaitant praleistus mazgus |
| CurrentNode | Mazgas, pasirinktas interaktyvaus naršymo žymeklio |
| ErrorOriginNodeId | Giliausias mazgas, sukėlęs galutinę formulės klaidą, arba -1, kai galutinis rezultatas nėra klaida |
| ErrorCode | Excel klaidos kodas, nešamas galutinės klaidos reikšmės |
| ErrorText | Excel rodymo tekstas, pvz., #DIV/0! arba #N/A |
Mazgų diagnostika
Kiekvienas TXLSFormulaDebugNode praneša savo pirminį mazgą, gylį, šaltinio atkarpą, mazgo rūšį, operatoriaus arba funkcijos pavadinimą, operandų mazgų identifikatorius, operandų reikšmes, rezultato reikšmę, vertinimo indeksą, būseną, pasirinktą šaką ir klaidos informaciją
Mazgo būsena yra fdsPending, fdsEvaluated, fdsSkipped arba fdsError
Šakų diagnostika skiria teisingą ir klaidingą IF kelius, reikšmės ir atsarginės IFERROR arba IFNA kelius bei pasirinktą CHOOSE, IFS arba SWITCH šaką
Atkurtos vidinės klaidos lieka matomos jų mazguose net tada, kai galutinis formulės rezultatas yra teisingas
Naršymas
MoveFirstparenka pirmąjį vertinimo žingsnįMoveNextirMovePreviousperkelia dabartinį žymeklį neperskaičiuodamiSeekNodeparenka vieną mazgą pagal jo stabilų sesijos vietinį identifikatoriųResetišvalo žymeklį, išsaugodamas visą diagnostiką
Pavyzdys
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;