Documentación HotXLS

Clase TXLSFormulaDebugger

TXLSFormulaDebugger analiza una fórmula en el contexto de una hoja de cálculo XLSX y devuelve un TXLSFormulaDebugSession propiedad del llamador

La sesión combina el árbol de expresiones analizado completo con el orden real de evaluación, los valores intermedios, las coordenadas de dependencias, las ramas diferidas seleccionadas, las expresiones omitidas y el primer origen de error

El llamador posee y debe liberar cada sesión devuelta por Analyze

Declaración

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

Miembros de la sesión

FormulaOrigen normalizado sin el signo igual inicial opcional
FinalValueValor escalar calculado o error de fórmula Variant estándar
NodesNodos analizados en orden de padre antes que hijo
DependenciesDependencias de celdas, rangos o nombres definidos con coordenadas de hoja de cálculo resueltas cuando están disponibles
StepNodesNodos en orden determinista de evaluación, incluidos los nodos omitidos
CurrentNodeNodo seleccionado por el cursor interactivo de navegación
ErrorOriginNodeIdNodo más profundo que originó el error final de la fórmula, o -1 cuando el resultado final no es un error
ErrorCodeCódigo de error de Excel transportado por el valor de error final
ErrorTextTexto de visualización de Excel como #DIV/0! o #N/A

Diagnósticos de nodos

Cada TXLSFormulaDebugNode informa de su padre, profundidad, intervalo de origen, tipo de nodo, nombre de operador o función, identificadores de nodos operando, valores de operando, valor de resultado, índice de evaluación, estado, rama seleccionada y detalles de error

El estado del nodo es fdsPending, fdsEvaluated, fdsSkipped o fdsError

Los diagnósticos de ramas distinguen las rutas verdadera y falsa de IF, las rutas de valor y de respaldo de IFERROR o IFNA, y la rama seleccionada de CHOOSE, IFS o SWITCH

Los errores internos recuperados permanecen visibles en sus nodos incluso cuando el resultado final de la fórmula es válido

Navegación

Ejemplo

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;

Véase también