Dokumentacija HotXLS

TXLSFormulaDebugger klasa

TXLSFormulaDebugger analizira formulu u kontekstu jednog XLSX radnog lista i vraća TXLSFormulaDebugSession u vlasništvu objekta

Sesija kombinuje kompletno raščlanjeno stablo izraza sa stvarnim redosledom izračunavanja, međuvrednostima, koordinatama zavisnosti, izabranim lenjim granama, preskočenim izrazima i poreklom prve greške

Pozivalac poseduje svaku sesiju koju vrati Analyze i mora je osloboditi

Deklaracija

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

Članovi sesije

FormulaNormalizovani izvor bez opcionog vodećeg znaka jednakosti
FinalValueIzračunata skalarna vrednost ili standardna Variant greška formule
NodesRaščlanjeni čvorovi u redosledu roditelj-pre-deteta
DependenciesZavisnosti ćelije, opsega ili definisanog imena sa razrešenim koordinatama radnog lista kada su dostupne
StepNodesČvorovi u determinističkom redosledu izračunavanja, uključujući preskočene čvorove
CurrentNodeČvor izabran interaktivnim kursorom za navigaciju
ErrorOriginNodeIdNajdublji čvor koji je prouzrokovao konačnu grešku formule, ili -1 kada konačni rezultat nije greška
ErrorCodeExcel kod greške koji nosi konačna vrednost greške
ErrorTextExcel tekst prikaza kao što su #DIV/0! ili #N/A

Dijagnostika čvorova

Svaki TXLSFormulaDebugNode izveštava o svom roditelju, dubini, rasponu izvora, vrsti čvora, imenu operatora ili funkcije, identifikatorima operanda, vrednostima operanda, vrednosti rezultata, indeksu izračunavanja, stanju, izabranoj grani i detaljima greške

Stanje čvora je fdsPending, fdsEvaluated, fdsSkipped ili fdsError

Dijagnostika grana razlikuje istinite i lažne IF putanje, putanje vrednosti i rezervne IFERROR ili IFNA putanje, kao i izabranu CHOOSE, IFS ili SWITCH granu

Oporavljene unutrašnje greške ostaju vidljive na svojim čvorovima čak i kada je konačni rezultat formule važeći

Navigacija

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;

Vidi takođe