Classe TXLSFormulaDebugger
TXLSFormulaDebugger analisa uma fórmula no contexto de uma planilha XLSX e retorna um TXLSFormulaDebugSession de propriedade do chamador
A sessão combina a árvore completa de expressões analisadas com a ordem real de avaliação, valores intermediários, coordenadas de dependências, ramos lentos selecionados, expressões ignoradas e a primeira origem de erro
O chamador é o proprietário e deve liberar toda sessão retornada por Analyze
Declaração
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
Membros da sessão
| Formula | Origem normalizada sem o sinal de igual opcional no início |
| FinalValue | Valor escalar calculado ou erro padrão de fórmula Variant |
| Nodes | Nós analisados em ordem de pai antes de filho |
| Dependencies | Dependências de célula, intervalo ou nome definido com coordenadas de planilha resolvidas quando disponíveis |
| StepNodes | Nós em ordem determinística de avaliação, incluindo nós ignorados |
| CurrentNode | Nó selecionado pelo cursor interativo de navegação |
| ErrorOriginNodeId | Nó mais profundo que originou o erro final da fórmula, ou -1 quando o resultado final não é um erro |
| ErrorCode | Código de erro do Excel transportado pelo valor de erro final |
| ErrorText | Texto de exibição do Excel, como #DIV/0! ou #N/A |
Diagnósticos de nó
Cada TXLSFormulaDebugNode informa seu pai, profundidade, extensão de origem, tipo de nó, nome do operador ou da função, identificadores de nós operandos, valores de operandos, valor do resultado, índice de avaliação, estado, ramo selecionado e detalhes de erro
O estado do nó é fdsPending, fdsEvaluated, fdsSkipped ou fdsError
Os diagnósticos de ramo distinguem caminhos IF verdadeiro e falso, caminhos de valor e de fallback de IFERROR ou IFNA, e o ramo selecionado de CHOOSE, IFS ou SWITCH
Erros internos recuperados permanecem visíveis em seus nós mesmo quando o resultado final da fórmula é válido
Navegação
MoveFirstseleciona a primeira etapa de avaliaçãoMoveNexteMovePreviousmovem o cursor atual sem recalcularSeekNodeseleciona um nó pelo seu identificador estável local à sessãoResetlimpa o cursor preservando todos os diagnósticos
Exemplo
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;