HotXLS-Dokumentation

Klasse TXLSFormulaDebugger

TXLSFormulaDebugger analysiert eine Formel im Kontext eines XLSX-Arbeitsblatts und gibt eine verwaltete TXLSFormulaDebugSession zurück

Die Sitzung kombiniert den vollständigen geparsten Ausdrucksbaum mit der tatsächlichen Auswertungsreihenfolge, Zwischenwerten, Abhängigkeitskoordinaten, ausgewählten verzögerten Zweigen, übersprungenen Ausdrücken und dem ersten Fehlerursprung

Der Aufrufer verwaltet jede von Analyze zurückgegebene Sitzung und muss sie freigeben

Deklaration

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

Sitzungselemente

FormulaNormalisierter Quelltext ohne das optionale führende Gleichheitszeichen
FinalValueBerechneter Skalarwert oder standardmäßiger Variant-Formelfehler
NodesGeparste Knoten in der Reihenfolge Eltern-vor-Kind
DependenciesZell-, Bereichs- oder definierte Namensabhängigkeiten mit aufgelösten Arbeitsblattkoordinaten, sofern verfügbar
StepNodesKnoten in deterministischer Auswertungsreihenfolge, einschließlich übersprungener Knoten
CurrentNodeKnoten, der vom interaktiven Navigationscursor ausgewählt wurde
ErrorOriginNodeIdTiefster Knoten, der den endgültigen Formelfehler verursacht hat, oder -1, wenn das Endergebnis kein Fehler ist
ErrorCodeExcel-Fehlercode, der vom endgültigen Fehlerwert getragen wird
ErrorTextExcel-Anzeigetext wie #DIV/0! oder #N/A

Knotendiagnose

Jeder TXLSFormulaDebugNode meldet seinen Elternknoten, Tiefe, Quellbereich, Knotenart, Operator- oder Funktionsnamen, Operandknoten-Kennungen, Operandwerte, Ergebniswert, Auswertungsindex, Zustand, ausgewählten Zweig und Fehlerdetails

Der Knotenzustand ist fdsPending, fdsEvaluated, fdsSkipped oder fdsError

Die Zweigdiagnose unterscheidet wahre und falsche IF-Pfade, Wert- und Fallback-IFERROR- oder IFNA-Pfade sowie den ausgewählten CHOOSE-, IFS- oder SWITCH-Zweig

Wiederhergestellte innere Fehler bleiben auf ihren Knoten sichtbar, auch wenn das endgültige Formelergebnis gültig ist

Navigation

Beispiel

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;

Siehe auch