HotXLS-dokumentasjon

TXLSFormulaDebugger-klassen

TXLSFormulaDebugger analyserer en formel i én XLSX-regnearkkontekst og returnerer en eid TXLSFormulaDebugSession

Økten kombinerer hele det tolkede uttrykkstreet med den faktiske evalueringsrekkefølgen, mellomverdier, avhengighetskoordinater, valgte late grener, hoppede uttrykk og det første feilopphavet

Den som kaller, eier og må frigjøre enhver økt som returneres av Analyze

Deklarasjon

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

Øktmedlemmer

FormulaNormalisert kilde uten det valgfrie innledende likhetstegnet
FinalValueBeregnet skalarverdi eller standard Variant-formelfeil
NodesTolkede noder i rekkefølgen foreldre-før-barn
DependenciesCelle-, område- eller definert-navn-avhengigheter med oppløste regnearkkoordinater der de er tilgjengelige
StepNodesNoder i deterministisk evalueringsrekkefølge, inkludert hoppede noder
CurrentNodeNode valgt av den interaktive navigasjonsmarkøren
ErrorOriginNodeIdDypeste node som ga opphav til den endelige formelfeilen, eller -1 når det endelige resultatet ikke er en feil
ErrorCodeExcel-feilkode som bæres av den endelige feilverdien
ErrorTextExcel-visningstekst som #DIV/0! eller #N/A

Nodediagnostikk

Hver TXLSFormulaDebugNode rapporterer sin forelder, dybde, kildespenning, nodeart, operator- eller funksjonsnavn, operandnodeidentifikatorer, operandverdier, resultatverdi, evalueringsindeks, tilstand, valgt gren og feildetaljer

Nodetilstanden er fdsPending, fdsEvaluated, fdsSkipped eller fdsError

Grenediagnostikk skiller sanne og usanne IF-baner, verdi- og fallback-IFERROR- eller IFNA-baner, og den valgte CHOOSE-, IFS- eller SWITCH-grenen

Gjenopprettede indre feil forblir synlige på sine noder selv når det endelige formelresultatet er gyldig

Navigasjon

Eksempel

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;

Se også