HotXLS-dokumentaatio

TXLSFormulaDebugger-luokka

TXLSFormulaDebugger analysoi kaavan yhdessä XLSX-laskentataulukon kontekstissa ja palauttaa omistetun TXLSFormulaDebugSession-istunnon

Istunto yhdistää täydellisen jäsennetyn lausekepuun todelliseen arviointijärjestykseen, välivaiheen arvoihin, riippuvuuskoordinaatteihin, valittuihin hitaasti suoritettaviin haaroihin, ohitettuihin lausekkeisiin ja ensimmäiseen virheen alkuperään

Soittaja omistaa ja sen on vapautettava jokainen Analyze-kutsun palauttama istunto

Määrittely

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

Istunnon jäsenet

FormulaNormalisoitu lähde ilman valinnaista johtavaa yhtäläisyysmerkkiä
FinalValueLaskettu skalaariarvo tai standardi Variant-kaavavirhe
NodesJäsennetyt solmukset vanhempi-ennen-lasta-järjestyksessä
DependenciesSolu-, alue- tai määriteltynimen riippuvuudet ratkaistuine laskentataulukkokoordinaatteineen, kun ne ovat saatavilla
StepNodesSolmukset deterministisessä arviointijärjestyksessä, mukaan lukien ohitetut solmukset
CurrentNodeInteraktiivisen navigointikursorin valitsema solmus
ErrorOriginNodeIdSyvin solmus, joka aiheutti lopullisen kaavavirheen, tai -1, kun lopputulos ei ole virhe
ErrorCodeLopullisen virhearvon sisältämä Excel-virhekoodi
ErrorTextExcelin näyttämä teksti, kuten #DIV/0! tai #N/A

Solmusten diagnostiikka

Jokainen TXLSFormulaDebugNode raportoi vanhempansa, syvyyden, lähdealueen, solmuksen tyypin, operaattorin tai funktion nimen, operandisolmuksien tunnisteet, operandien arvot, tulosarvon, arviointi-indeksin, tilan, valitun haaran ja virhetiedot

Solmuksen tila on fdsPending, fdsEvaluated, fdsSkipped tai fdsError

Haaradiagnostiikka erottaa tosi- ja epätosi-IF-polut, arvo- ja varapolut IFERROR tai IFNA -funktioille sekä valitun CHOOSE, IFS tai SWITCH -haaran

Palautetut sisäiset virheet pysyvät näkyvissä omissa solmuksissaan, vaikka lopullinen kaavatulos olisi kelvollinen

Navigointi

Esimerkki

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;

Katso myös