TXLSFormulaDebugger 类
TXLSFormulaDebugger 在一个 XLSX 工作表上下文中分析公式,并返回一个由调用方拥有的 TXLSFormulaDebugSession
该会话将完整的解析表达式树与实际求值顺序、中间值、依赖坐标、选定的惰性分支、跳过的表达式以及第一个错误来源结合起来
调用方拥有并必须释放由 Analyze 返回的每个会话
声明
type
TXLSFormulaDebugger = class
constructor Create(Worksheet: TXLSXWorksheet);
function Analyze(const Formula: WideString):
TXLSFormulaDebugSession;
end;
会话成员
| Formula | 没有可选的前导等号的规范化源代码 |
| FinalValue | 计算的标量值或标准 Variant 公式错误 |
| Nodes | 按父节点在前、子节点在后的顺序排列的解析节点 |
| Dependencies | 在可用时带已解析工作表坐标的单元格、区域或已定义名称依赖项 |
| StepNodes | 按确定性求值顺序排列的节点,包括跳过的节点 |
| CurrentNode | 由交互式导航游标选中的节点 |
| ErrorOriginNodeId | 引发最终公式错误的最深节点,当最终结果不是错误时为 -1 |
| ErrorCode | 最终错误值携带的 Excel 错误代码 |
| ErrorText | Excel 显示文本,如 #DIV/0! 或 #N/A |
节点诊断
每个 TXLSFormulaDebugNode 报告其父节点、深度、源跨度、节点类型、运算符或函数名称、操作数节点标识符、操作数值、结果值、求值索引、状态、选定分支和错误详情
节点状态是 fdsPending、fdsEvaluated、fdsSkipped 或 fdsError
分支诊断区分 IF 的真和假路径、IFERROR 或 IFNA 的值和回退路径,以及选定的 CHOOSE、IFS 或 SWITCH 分支
即使最终公式结果有效,恢复的内部错误仍保持在其节点上可见
导航
MoveFirst选择第一个求值步骤MoveNext和MovePrevious移动当前游标而无需重新计算SeekNode按其稳定的会话局部标识符选择一个节点Reset清除游标,同时保留所有诊断
示例
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;