Documentație HotXLS

Clasa TXLSFormulaDebugger

TXLSFormulaDebugger analizează o formulă în contextul unei singure foi de lucru XLSX și returnează o TXLSFormulaDebugSession deținută

Sesiunea combină arborele complet de expresii analizat cu ordinea reală de evaluare, valorile intermediare, coordonatele dependențelor, ramurile leneșe selectate, expresiile sărite și originea primei erori

Apelantul deține și trebuie să elibereze fiecare sesiune returnată de Analyze

Declarație

type
  TXLSFormulaDebugger = class
    constructor Create(Worksheet: TXLSXWorksheet);
    function Analyze(const Formula: WideString):
      TXLSFormulaDebugSession;
  end;

Membrii sesiunii

FormulaSursa normalizată fără semnul egal inițial opțional
FinalValueValoare scalară calculată sau eroare de formulă standard Variant
NodesNoduri analizate în ordine părinte-înainte-de-copil
DependenciesDependențe de celulă, interval sau nume definit, cu coordonate de foaie de lucru rezolvate atunci când sunt disponibile
StepNodesNoduri în ordine deterministă de evaluare, inclusiv nodurile sărite
CurrentNodeNodul selectat de cursorul interactiv de navigare
ErrorOriginNodeIdCel mai profund nod care a generat eroarea finală a formulei, sau -1 atunci când rezultatul final nu este o eroare
ErrorCodeCodul de eroare Excel purtat de valoarea finală de eroare
ErrorTextTextul de afișare Excel, cum ar fi #DIV/0! sau #N/A

Diagnosticare nod

Fiecare TXLSFormulaDebugNode raportează părintele său, adâncimea, intervalul sursă, tipul de nod, operatorul sau numele funcției, identificatorii nodurilor operanzilor, valorile operanzilor, valoarea rezultatului, indicele de evaluare, starea, ramura selectată și detaliile erorii

Starea nodului este fdsPending, fdsEvaluated, fdsSkipped sau fdsError

Diagnosticarea ramurilor distinge căile IF adevărată și falsă, căile IFERROR sau IFNA de valoare și de rezervă și ramura selectată CHOOSE, IFS sau SWITCH

Erorile interne recuperate rămân vizibile pe nodurile lor chiar și atunci când rezultatul final al formulei este valid

Navigare

Exemplu

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;

Consultați și