Klasse TXLSFormulaDebugger
TXLSFormulaDebugger analyseert een formule in de context van één XLSX-werkblad en retourneert een beheerde TXLSFormulaDebugSession
De sessie combineert de volledige geparste expressieboom met de werkelijke evaluatievolgorde, tussenwaarden, afhankelijkheidscoördinaten, geselecteerde luie vertakkingen, overgeslagen expressies en de eerste foutoorsprong
De aanroeper is eigenaar van elke door Analyze geretourneerde sessie en moet deze vrijgeven
Declaratie
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Sessieleden
| Formula | Genormaliseerde bron zonder het optionele leidende gelijkteken |
| FinalValue | Berekende scalaire waarde of standaard Variant-formulefout |
| Nodes | Geparste knooppunten in de volgorde ouder-vóór-kind |
| Dependencies | Cel-, bereik- of gedefinieerde-naamafhankelijkheden met opgeloste werkbladcoördinaten wanneer beschikbaar |
| StepNodes | Knooppunten in deterministische evaluatievolgorde, inclusief overgeslagen knooppunten |
| CurrentNode | Knooppunt dat door de interactieve navigatiecursor is geselecteerd |
| ErrorOriginNodeId | Diepste knooppunt dat de uiteindelijke formulefout heeft veroorzaakt, of -1 wanneer het eindresultaat geen fout is |
| ErrorCode | Excel-foutcode die door de uiteindelijke foutwaarde wordt gedragen |
| ErrorText | Excel-weergavetekst zoals #DIV/0! of #N/A |
Knooppuntdiagnostiek
Elk TXLSFormulaDebugNode rapporteert de ouder, diepte, bronbereik, knooppuntsoort, operator- of functienaam, operandknooppunt-id's, operandwaarden, resultaatwaarde, evaluatie-index, status, geselecteerde vertakking en foutdetails
De knooppuntstatus is fdsPending, fdsEvaluated, fdsSkipped of fdsError
Vertakkingsdiagnostiek onderscheidt ware en onware IF-paden, waarde- en terugval-IFERROR- of IFNA-paden en de geselecteerde CHOOSE-, IFS- of SWITCH-vertakking
Herstelde innerlijke fouten blijven op hun knooppunten zichtbaar, zelfs wanneer het uiteindelijke formuleresultaat geldig is
Navigatie
MoveFirstselecteert de eerste evaluatiestapMoveNextenMovePreviousverplaatsen de huidige cursor zonder opnieuw te berekenenSeekNodeselecteert één knooppunt via de stabiele sessielokale identificatieResetwist de cursor terwijl alle diagnostiek behouden blijft
Voorbeeld
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;