Dokumentacija HotXLS

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

FormulaNormalizirani izvor bez opcionalnog vodećeg znaka jednakosti
FinalValueIzračunata skalarna vrijednost ili standardna pogreška formule Variant
NodesRaščlanjeni čvorovi u redoslijedu roditelj-prije-djeteta
DependenciesOvisnosti 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
ErrorOriginNodeIdNajdublji čvor koji je izvorište konačne pogreške formule, ili -1 kada konačni rezultat nije pogreška
ErrorCodeKod pogreške programa Excel koji nosi konačna vrijednost pogreške
ErrorTextTekst 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

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;

Vidi također