HotXLS-dokumentation

Klassen TXLSFormulaDebugger

TXLSFormulaDebugger analyserar en formel i ett XLSX-arbetsbladssammanhang och returnerar en ägd TXLSFormulaDebugSession

Sessionen kombinerar det kompletta tolkade uttrycksträdet med den faktiska utvärderingsordningen, mellanvärden, beroendekoordinater, valda lata grenar, överhoppade uttryck och den första felorsaken

Anroparen äger och måste frigöra varje session som returneras av Analyze

Deklaration

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

Sessionsmedlemmar

FormulaNormaliserad källa utan det valfria inledande likhetstecknet
FinalValueBeräknat skalärt värde eller standardfel för Variant-formler
NodesTolkade noder i ordningen förälder-före-barn
DependenciesCell-, intervall- eller definierat-namn-beroenden med upplösta arbetsbladskoordinater där så är tillgängligt
StepNodesNoder i deterministisk utvärderingsordning, inklusive överhoppade noder
CurrentNodeNod som valts av den interaktiva navigeringsmarkören
ErrorOriginNodeIdDjupaste noden som orsakade det slutliga formelfelet, eller -1 när slutresultatet inte är ett fel
ErrorCodeExcel-felkod som bärs av det slutliga felvärdet
ErrorTextExcel-visningstext som #DIV/0! eller #N/A

Noddiagnostik

Varje TXLSFormulaDebugNode rapporterar sin förälder, djup, källspann, nodtyp, operator- eller funktionsnamn, operandnodidentifierare, operandvärden, resultatvärde, utvärderingsindex, status, vald gren och feldetaljer

Nodstatus är fdsPending, fdsEvaluated, fdsSkipped eller fdsError

Grendiagnostik skiljer sanna och falska IF-sökvägar, värde- och fallbacksökvägar för IFERROR eller IFNA, samt den valda CHOOSE-, IFS- eller SWITCH-grenen

Återställda inre fel förblir synliga på sina noder även när slutresultatet för formeln är giltigt

Navigering

Exempel

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 även