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
| Formula | Origen normalizado sin el signo igual inicial opcional |
| FinalValue | Valor escalar calculado o error de fórmula Variant estándar |
| Nodes | Nodos analizados en orden de padre antes que hijo |
| Dependencies | Dependencias de celdas, rangos o nombres definidos con coordenadas de hoja de cálculo resueltas cuando están disponibles |
| StepNodes | Nodos en orden determinista de evaluación, incluidos los nodos omitidos |
| CurrentNode | Nodo seleccionado por el cursor interactivo de navegación |
| ErrorOriginNodeId | Nodo más profundo que originó el error final de la fórmula, o -1 cuando el resultado final no es un error |
| ErrorCode | Código de error de Excel transportado por el valor de error final |
| ErrorText | Texto 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
MoveFirstselecciona el primer paso de evaluaciónMoveNextyMovePreviousmueven el cursor actual sin recalcularSeekNodeselecciona un nodo por su identificador estable local a la sesiónResetlimpia el cursor conservando todos los diagnósticos
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;