เอกสาร HotXLS

คลาส TXLSFormulaDebugger

TXLSFormulaDebugger วิเคราะห์สูตรในบริบทเวิร์กชีต XLSX หนึ่งตัวและคืน TXLSFormulaDebugSession ที่เป็นของผู้เรียก

เซสชันรวมต้นไม้ไวยากรณ์ที่แยกวิเคราะห์ที่สมบูรณ์เข้ากับลำดับการประเมินจริง, ค่ากลาง, พิกัดการพึ่งพา, กิ่งขี้เกียจที่เลือก, นิพจน์ที่ข้าม และต้นกำเนิดข้อผิดพลาดแรก

ผู้เรียกเป็นเจ้าของและต้องปลดปล่อยทุกเซสชันที่คืนโดย Analyze

การประกาศ

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

สมาชิกของเซสชัน

Formulaซอร์สที่ทำให้เป็นมาตรฐานโดยไม่มีเครื่องหมายเท่ากับนำหน้าแบบไม่บังคับ
FinalValueค่าสเกลาร์ที่คำนวณได้หรือข้อผิดพลาดสูตร Variant มาตรฐาน
Nodesโหนดที่แยกวิเคราะห์ตามลำดับ parent ก่อน child
Dependenciesการพึ่งพาเซลล์, ช่วง หรือชื่อที่กำหนดพร้อมพิกัดเวิร์กชีตที่แก้ไขแล้วเมื่อมี
StepNodesโหนดตามลำดับการประเมินที่กำหนดไว้ รวมถึงโหนดที่ข้าม
CurrentNodeโหนดที่เลือกโดยเคอร์เซอร์การนำทางเชิงโต้ตอบ
ErrorOriginNodeIdโหนดที่ลึกที่สุดที่ก่อให้เกิดข้อผิดพลาดสูตรสุดท้าย หรือ -1 เมื่อผลลัพธ์สุดท้ายไม่ใช่ข้อผิดพลาด
ErrorCodeรหัสข้อผิดพลาดของ Excel ที่นำติดตัวโดยค่าข้อผิดพลาดสุดท้าย
ErrorTextข้อความแสดงผลของ Excel เช่น #DIV/0! หรือ #N/A

การวินิจฉัยโหนด

แต่ละ TXLSFormulaDebugNode รายงาน parent, ความลึก, ช่วงซอร์ส, ชนิดโหนด, ชื่อตัวดำเนินการหรือฟังก์ชัน, ตัวระบุโหนดตัวถูกดำเนินการ, ค่าตัวถูกดำเนินการ, ค่าผลลัพธ์, ดัชนีการประเมิน, สถานะ, กิ่งที่เลือก และรายละเอียดข้อผิดพลาด

สถานะโหนดคือ 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;

ดูเพิ่มเติม