Клас 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;