HotXLS Belgeleri

TXLSFormulaDebugger class

TXLSFormulaDebugger, tek bir XLSX çalışma sayfası bağlamında bir formülü çözümler ve sahiplenilmiş bir TXLSFormulaDebugSession döndürür

Oturum, eksiksiz ayrıştırılmış ifade ağacını gerçek değerlendirme sırası, ara değerler, bağımlılık koordinatları, seçilen tembel dallar, atlanan ifadeler ve ilk hata kaynağıyla birleştirir

Çağıran, Analyze tarafından döndürülen her oturumun sahibidir ve onu serbest bırakmalıdır

Bildirim

type
  TXLSFormulaDebugger = class
    constructor Create(Worksheet: TXLSXWorksheet);
    function Analyze(const Formula: WideString):
      TXLSFormulaDebugSession;
  end;

Oturum üyeleri

Formulaİsteğe bağlı baştaki eşittir işareti olmayan normalleştirilmiş kaynak
FinalValueHesaplanan skaler değer veya standart Variant formül hatası
NodesÜst-önce-çocuk sırasındaki ayrıştırılmış düğümler
DependenciesKullanılabilir olduğunda çözümlenmiş çalışma sayfası koordinatlarına sahip hücre, aralık veya tanımlı ad bağımlılıkları
StepNodesAtlanan düğümler dahil belirlenimci değerlendirme sırasındaki düğümler
CurrentNodeEtkileşimli gezinme imleci tarafından seçilen düğüm
ErrorOriginNodeIdSon formül hatasının kaynağı olan en derin düğüm veya son sonuç bir hata değilken -1
ErrorCodeSon hata değeri tarafından taşınan Excel hata kodu
ErrorText#DIV/0! veya #N/A gibi Excel görüntüleme metni

Düğüm tanılaması

Her TXLSFormulaDebugNode, üst öğesini, derinliğini, kaynak aralığını, düğüm türünü, işleç veya işlev adını, işlenen düğüm tanımlayıcılarını, işlenen değerlerini, sonuç değerini, değerlendirme dizinini, durumunu, seçilen dalı ve hata ayrıntılarını bildirir

Düğüm durumu fdsPending, fdsEvaluated, fdsSkipped veya fdsError değerlerinden biridir

Dal tanılaması, doğru ve yanlış IF yollarını, değer ve geri dönüş IFERROR veya IFNA yollarını ve seçilen CHOOSE, IFS veya SWITCH dalını ayırt eder

Kurtarılan iç hatalar, son formül sonucu geçerli olsa bile düğümlerinde görünür kalır

Gezinme

Örnek

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;

Ayrıca bkz.