Docs HotXLS

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

FormulaSource normalisée sans le signe égal initial facultatif
FinalValueValeur scalaire calculée ou erreur de formule Variant standard
NodesNœuds analysés dans l'ordre parent avant enfant
DependenciesDépendances de cellule, de plage ou de nom défini avec coordonnées de feuille de calcul résolues lorsqu'elles sont disponibles
StepNodesNœuds dans l'ordre d'évaluation déterministe, y compris les nœuds ignorés
CurrentNodeNœud sélectionné par le curseur de navigation interactif
ErrorOriginNodeIdNœud le plus profond à l'origine de l'erreur de formule finale, ou -1 lorsque le résultat final n'est pas une erreur
ErrorCodeCode d'erreur Excel porté par la valeur d'erreur finale
ErrorTextTexte 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

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;

Voir aussi