Dokumentacija HotXLS

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

FormulaNormaliziran izvor brez neobveznega vodilnega enačaja
FinalValueIzračunana skalarna vrednost ali standardna napaka formule Variant
NodesRazčlenjena vozlišča v vrstnem redu starš pred otrokom
DependenciesOdvisnosti od celice, obsega ali definiranega sklica z razrešenimi koordinatami delovnega lista, kadar so na voljo
StepNodesVozlišča v determinističnem vrstnem redu vrednotenja, vključno s preskočenimi vozlišči
CurrentNodeVozlišče, ki ga izbere interaktivni kurzor za krmarjenje
ErrorOriginNodeIdNajgloblje vozlišče, ki je povzročilo končno napako formule, ali -1, kadar končni rezultat ni napaka
ErrorCodeKoda napake programa Excel, ki jo nosi končna vrednost napake
ErrorTextPrikazano 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

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;

Glej tudi