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
| Formula | Normalisierter Quelltext ohne das optionale führende Gleichheitszeichen |
| FinalValue | Berechneter Skalarwert oder standardmäßiger Variant-Formelfehler |
| Nodes | Geparste Knoten in der Reihenfolge Eltern-vor-Kind |
| Dependencies | Zell-, Bereichs- oder definierte Namensabhängigkeiten mit aufgelösten Arbeitsblattkoordinaten, sofern verfügbar |
| StepNodes | Knoten in deterministischer Auswertungsreihenfolge, einschließlich übersprungener Knoten |
| CurrentNode | Knoten, der vom interaktiven Navigationscursor ausgewählt wurde |
| ErrorOriginNodeId | Tiefster Knoten, der den endgültigen Formelfehler verursacht hat, oder -1, wenn das Endergebnis kein Fehler ist |
| ErrorCode | Excel-Fehlercode, der vom endgültigen Fehlerwert getragen wird |
| ErrorText | Excel-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
MoveFirstwählt den ersten AuswertungsschrittMoveNextundMovePreviousbewegen den aktuellen Cursor ohne NeuberechnungSeekNodewählt einen Knoten über seine stabile sitzungslokale Kennung ausResetsetzt den Cursor zurück, wobei alle Diagnosen erhalten bleiben
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;