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
| Formula | Normaliserad källa utan det valfria inledande likhetstecknet |
| FinalValue | Beräknat skalärt värde eller standardfel för Variant-formler |
| Nodes | Tolkade noder i ordningen förälder-före-barn |
| Dependencies | Cell-, intervall- eller definierat-namn-beroenden med upplösta arbetsbladskoordinater där så är tillgängligt |
| StepNodes | Noder i deterministisk utvärderingsordning, inklusive överhoppade noder |
| CurrentNode | Nod som valts av den interaktiva navigeringsmarkören |
| ErrorOriginNodeId | Djupaste noden som orsakade det slutliga formelfelet, eller -1 när slutresultatet inte är ett fel |
| ErrorCode | Excel-felkod som bärs av det slutliga felvärdet |
| ErrorText | Excel-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
MoveFirstväljer det första utvärderingsstegetMoveNextochMovePreviousflyttar den aktuella markören utan omberäkningSeekNodeväljer en nod efter dess stabila sessionslokala identifierareResetrensar markören samtidigt som all diagnostik bevaras
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;