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;