Dokumentace HotXLS

Třída TXLSFormulaDebugger

TXLSFormulaDebugger analyzuje vzorec v kontextu jednoho listu XLSX a vrací vlastněnou TXLSFormulaDebugSession

Relace kombinuje kompletní strom analyzovaných výrazů se skutečným pořadím vyhodnocení, mezihodnotami, souřadnicemi závislostí, vybranými odloženými větvemi, přeskočenými výrazy a prvním původem chyby

Volající vlastní a musí uvolnit každou relaci vrácenou metodou Analyze

Deklarace

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

Členové relace

FormulaNormalizovaný zdroj bez volitelného úvodního znaménka rovná se
FinalValueVypočtená skalární hodnota nebo standardní chyba vzorce typu Variant
NodesAnalyzované uzly v pořadí rodič před dítětem
DependenciesZávislosti buněk, rozsahů nebo definovaných názvů s vyřešenými souřadnicemi listu, jsou-li k dispozici
StepNodesUzly v deterministickém pořadí vyhodnocení, včetně přeskočených uzlů
CurrentNodeUzel vybraný interaktivním navigačním kurzorem
ErrorOriginNodeIdNejhlubší uzel, který způsobil konečnou chybu vzorce, nebo -1, když konečný výsledek není chyba
ErrorCodeKód chyby Excelu nesený konečnou chybovou hodnotou
ErrorTextZobrazovaný text Excelu, jako je #DIV/0! nebo #N/A

Diagnostika uzlů

Každý TXLSFormulaDebugNode hlásí svého rodiče, hloubku, rozpětí zdroje, druh uzlu, operátor nebo název funkce, identifikátory operandů, hodnoty operandů, výslednou hodnotu, index vyhodnocení, stav, vybranou větev a podrobnosti chyby

Stav uzlu je fdsPending, fdsEvaluated, fdsSkipped nebo fdsError

Diagnostika větví rozlišuje větev IF true a false, cesty IFERROR nebo IFNA s hodnotou a náhradou a vybranou větev CHOOSE, IFS nebo SWITCH

Obnovené vnitřní chyby zůstávají viditelné na svých uzlech, i když je konečný výsledek vzorce platný

Navigace

Příklad

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;

Viz také