Classe TXLSFormulaDebugger
TXLSFormulaDebugger analyse une formule dans le contexte d'une feuille de calcul XLSX et renvoie une TXLSFormulaDebugSession détenue
La session combine l'arbre d'expression analysé complet avec l'ordre d'évaluation réel, les valeurs intermédiaires, les coordonnées de dépendances, les branches paresseuses sélectionnées, les expressions ignorées et la première origine d'erreur
L'appelant possède et doit libérer chaque session renvoyée par Analyze
Déclaration
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Membres de la session
| Formula | Source normalisée sans le signe égal initial facultatif |
| FinalValue | Valeur scalaire calculée ou erreur de formule Variant standard |
| Nodes | Nœuds analysés dans l'ordre parent avant enfant |
| Dependencies | Dépendances de cellule, de plage ou de nom défini avec coordonnées de feuille de calcul résolues lorsqu'elles sont disponibles |
| StepNodes | Nœuds dans l'ordre d'évaluation déterministe, y compris les nœuds ignorés |
| CurrentNode | Nœud sélectionné par le curseur de navigation interactif |
| ErrorOriginNodeId | Nœud le plus profond à l'origine de l'erreur de formule finale, ou -1 lorsque le résultat final n'est pas une erreur |
| ErrorCode | Code d'erreur Excel porté par la valeur d'erreur finale |
| ErrorText | Texte d'affichage Excel tel que #DIV/0! ou #N/A |
Diagnostics de nœuds
Chaque TXLSFormulaDebugNode indique son parent, sa profondeur, sa plage source, son type de nœud, le nom de l'opérateur ou de la fonction, les identifiants des nœuds opérandes, les valeurs des opérandes, la valeur du résultat, l'index d'évaluation, l'état, la branche sélectionnée et les détails de l'erreur
L'état d'un nœud est fdsPending, fdsEvaluated, fdsSkipped ou fdsError
Les diagnostics de branches distinguent les chemins vrais et faux de IF, les chemins de valeur et de repli de IFERROR ou IFNA, et la branche sélectionnée de CHOOSE, IFS ou SWITCH
Les erreurs internes récupérées restent visibles sur leurs nœuds même lorsque le résultat final de la formule est valide
Navigation
MoveFirstsélectionne la première étape d'évaluationMoveNextetMovePreviousdéplacent le curseur courant sans recalculerSeekNodesélectionne un nœud par son identifiant stable local à la sessionResetefface le curseur tout en préservant tous les diagnostics
Exemple
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;