Документация на 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, носен от крайната стойност на грешката
ErrorTextТекст за показване на Excel, като #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;

Свързани теми