HotXLS dokumentacija

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

FormulaNormalizuotas šaltinis be pasirinktinio pirmojo lygybės ženklo
FinalValueApskaičiuota skaliarinė reikšmė arba standartinė Variant formulės klaida
NodesIšanalizuoti mazgai tvarka „pirminis prieš vaikinį“
DependenciesLangelio, diapazono arba apibrėžto pavadinimo priklausomybės su išspręstomis darbalapio koordinatėmis, kai jos prieinamos
StepNodesMazgai deterministine vertinimo tvarka, įskaitant praleistus mazgus
CurrentNodeMazgas, pasirinktas interaktyvaus naršymo žymeklio
ErrorOriginNodeIdGiliausias mazgas, sukėlęs galutinę formulės klaidą, arba -1, kai galutinis rezultatas nėra klaida
ErrorCodeExcel klaidos kodas, nešamas galutinės klaidos reikšmės
ErrorTextExcel 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

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;

Taip pat žiūrėkite