HotXLS 文档

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 错误代码
ErrorTextExcel 显示文本,如 #DIV/0! 或 #N/A

节点诊断

每个 TXLSFormulaDebugNode 报告其父节点、深度、源跨度、节点类型、运算符或函数名称、操作数节点标识符、操作数值、结果值、求值索引、状态、选定分支和错误详情

节点状态是 fdsPending、fdsEvaluated、fdsSkipped 或 fdsError

分支诊断区分 IF 的真和假路径、IFERROR 或 IFNA 的值和回退路径,以及选定的 CHOOSE、IFS 或 SWITCH 分支

即使最终公式结果有效,恢复的内部错误仍保持在其节点上可见

导航

示例

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;

另请参阅