Dokumentácia HotXLS

Trieda TXLSFormulaDebugger

TXLSFormulaDebugger analyzuje vzorec v kontexte jedného XLSX hárka a vracia vlastnenú TXLSFormulaDebugSession

Relácia kombinuje kompletný parsovaný výrazový strom so skutočným poradím vyhodnotenia, medzihodnotami, súradnicami závislostí, vybranými odloženými vetvami, preskočenými výrazmi a prvým pôvodom chyby

Volajúci vlastní a musí uvoľniť každú reláciu vrátenú Analyze

Deklarácia

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

Členy relácie

FormulaNormalizovaný zdroj bez voliteľného úvodného znaku rovná sa
FinalValueVypočítaná skalárna hodnota alebo štandardná chyba vzorca Variant
NodesParsované uzly v poradí rodič-pred-potomkom
DependenciesZávislosti buniek, rozsahov alebo pomenovaných názvov s vyriešenými súradnicami hárka, ak sú dostupné
StepNodesUzly v deterministickom poradí vyhodnotenia vrátane preskočených uzlov
CurrentNodeUzol vybraný interaktívnym navigačným kurzorom
ErrorOriginNodeIdNajhlbší uzol, z ktorého pochádza konečná chyba vzorca, alebo -1, keď konečný výsledok nie je chyba
ErrorCodeKód chyby Excelu nesený konečnou hodnotou chyby
ErrorTextZobrazovaný text Excelu, napríklad #DIV/0! alebo #N/A

Diagnostika uzlov

Každý TXLSFormulaDebugNode hlási svoj rodič, hĺbku, rozsah zdroja, druh uzla, názov operátora alebo funkcie, identifikátory operandov, hodnoty operandov, výslednú hodnotu, index vyhodnotenia, stav, vybranú vetvu a podrobnosti o chybe

Stav uzla je fdsPending, fdsEvaluated, fdsSkipped alebo fdsError

Diagnostika vetiev rozlišuje pravdivé a nepravdivé cesty IF, cesty hodnoty a fallbacku IFERROR alebo IFNA a vybranú vetvu CHOOSE, IFS alebo SWITCH

Obnovené vnútorné chyby zostávajú viditeľné na svojich uzloch, aj keď je konečný výsledok vzorca platný

Navigácia

Prí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;

Pozri tiež