HotXLS-documentatie

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

FormulaGenormaliseerde bron zonder het optionele leidende gelijkteken
FinalValueBerekende scalaire waarde of standaard Variant-formulefout
NodesGeparste knooppunten in de volgorde ouder-vóór-kind
DependenciesCel-, bereik- of gedefinieerde-naamafhankelijkheden met opgeloste werkbladcoördinaten wanneer beschikbaar
StepNodesKnooppunten in deterministische evaluatievolgorde, inclusief overgeslagen knooppunten
CurrentNodeKnooppunt dat door de interactieve navigatiecursor is geselecteerd
ErrorOriginNodeIdDiepste knooppunt dat de uiteindelijke formulefout heeft veroorzaakt, of -1 wanneer het eindresultaat geen fout is
ErrorCodeExcel-foutcode die door de uiteindelijke foutwaarde wordt gedragen
ErrorTextExcel-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

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;

Zie ook