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