HotXLS dokumentáció

TXLSFormulaDebugger osztály

TXLSFormulaDebugger egy képletet elemez egy XLSX munkalap-kontextusban, és egy hívó tulajdonában lévő TXLSFormulaDebugSession objektumot ad vissza

A munkamenet a teljes elemzett kifejezésfát ötvözi a tényleges kiértékelési sorrenddel, a köztes értékekkel, a függőségi koordinátákkal, a kiválasztott lusta ágakkal, a kihagyott kifejezésekkel és az első hibaelőzménnyel

A hívó birtokolja, és köteles felszabadítani minden, az Analyze által visszaadott munkamenetet

Deklaráció

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

Munkamenet-tagok

FormulaNormalizált forrás az opcionális vezető egyenlőségjel nélkül
FinalValueKiszámított skaláris érték vagy standard Variant képlethiba
NodesElemzett csomópontok szülő-a-gyerek-előtt sorrendben
DependenciesCella-, tartomány- vagy definiált név-függőségek feloldott munkalap-koordinátákkal, ahol elérhetők
StepNodesCsomópontok determinisztikus kiértékelési sorrendben, beleértve a kihagyott csomópontokat is
CurrentNodeAz interaktív navigációs kurzor által kiválasztott csomópont
ErrorOriginNodeIdAz a legmélyebb csomópont, amely a végső képlethibát okozta, vagy -1, ha a végeredmény nem hiba
ErrorCodeA végső hibáérték által hordozott Excel-hibakód
ErrorTextExcel megjelenítési szöveg, például #DIV/0! vagy #N/A

Csomópont-diagnosztika

Minden TXLSFormulaDebugNode jelenti a szülőjét, a mélységét, a forrástartományát, a csomópontfajtáját, az operátor- vagy függvénynevét, az operandus-csomópont-azonosítóit, az operandusértékeit, az eredményértékét, a kiértékelési indexét, az állapotát, a kiválasztott ágát és a hibadetailszait

A csomópontállapot fdsPending, fdsEvaluated, fdsSkipped vagy fdsError lehet

Az ágdiagnosztika megkülönbözteti az IF igaz és hamis útvonalait, az IFERROR vagy IFNA érték- és tartalékútvonalait, valamint a kiválasztott CHOOSE, IFS vagy SWITCH ágat

A visszanyert belső hibák láthatók maradnak a csomópontjaikon, még akkor is, ha a végső képleteredmény érvényes

Navigáció

Példa

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;

Lásd még