เอกสาร HotXLS

เมธอด TryGetCachedFormulaValue

อ่านผลลัพธ์สูตรที่จัดเก็บไว้โดยไม่ประเมินสูตรหรือเปลี่ยนสถานะสมุดงาน

เมธอดนี้ใช้ได้ทั้งกับ IXLSWorkbook และ TXLSXWorkbook การใช้งานสมุดงานแบบแพ็กเกจครอบคลุมไฟล์ XLSX และ ODS

โค้ดที่เป็นกลางต่อเอนจินสามารถขอ IXLSFormulaCacheReader จากเอนจินใดก็ได้ผ่าน CreateFormulaCacheReader แล้วใช้เมธอดสืบค้นชุดเดียวกัน

ไวยากรณ์

function TryGetCachedFormulaValue(
  SheetIndex, Row, Col: Integer;
  out AInfo: TXLSFormulaCacheInfo): Boolean;

พิกัดและค่าส่งกลับ

SheetIndex, Row และ Col เริ่มนับจาก 1 ทั้งหมด

เมธอดส่งกลับ True เฉพาะกับเซลล์สูตรที่สถานะแคชเป็น xlfcsLoaded หรือ xlfcsCalculated

พิกัดไม่ถูกต้อง เซลล์ที่ไม่มีอยู่ และเซลล์ที่ไม่ใช่สูตร ส่งกลับ False พร้อม xlfcsNotFormula

สูตรที่ไม่มีผลลัพธ์จัดเก็บไว้ส่งกลับ False พร้อม xlfcsMissing ส่วนสูตรที่เคยมีแคชแต่สูตรหรือการคำนวณล้มเหลวหลังการแก้ไข ส่งกลับ False พร้อม xlfcsInvalidated

ข้อมูลแคช

ฟิลด์ความหมาย
StatexlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated หรือ xlfcsInvalidated
KindxlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean หรือ xlfcvError
Valueค่า Variant ที่เป็นของตนจากแคชเมื่อเมธอดส่งกลับ True มิฉะนั้นเป็น Unassigned

ผลลัพธ์ว่างเปล่า สตริงว่าง ค่าตรรกะ false ศูนย์ตัวเลข และข้อผิดพลาด ต่างคงชนิดที่แตกต่างกันไว้ และไม่ถูกใช้แทนการบ่งชี้การมีอยู่ของแคช

แคชตัวเลขแบบ BIFF ยังคงเป็น Double เนื่องจากระเบียนไม่มีเครื่องหมายชนิดวันที่ แคชข้อผิดพลาดจะถูกส่งกลับเป็น varError

สำหรับสมุดงานแบบแพ็กเกจ ค่าวันที่ t="d" ของ OOXML และวันที่แบบ ODF ส่งกลับ varDate, t="e" ของ OOXML ส่งกลับ varError และเซลล์ว่างที่แคชไว้แบบ ODF จะถูกรักษาไว้ด้วยชนิดค่า void

การเปลี่ยนสูตรจะทำให้แคชเดิมของสูตรล้าสมัย ส่วนการกำหนดค่าแคชแล้วกำหนดสูตรของค่านั้นจะบันทึกเป็นแคชที่คำนวณแล้ว

สมาชิกแต่ละตัวของสูตรที่ใช้ร่วมกันจะคงการมีอยู่ของแคชและค่าของตนเอง สมาชิกตามที่ไม่มีผลลัพธ์จัดเก็บไว้จะรายงาน xlfcsMissing แทนการรับช่วงแคชของสมาชิกราก

สัญญาไม่คำนวณ

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

ใช้คุณสมบัติ Value ปกติของเซลล์เมื่อต้องการการคำนวณ

อายุการใช้งานของตัวอ่าน

CreateFormulaCacheReader ส่งกลับอะแดปเตอร์แบบอ่านอย่างเดียวที่พยุงด้วยการเช่าอายุการใช้งานของสมุดงาน โดยไม่โอนความเป็นเจ้าของสมุดงาน

หลังสมุดงานถูกทำลาย การสืบค้นใด ๆ ผ่านอะแดปเตอร์นั้นจะทำให้เกิด EXLSFormulaCacheReaderInvalidated แทนการอ้างถึงสถานะสมุดงานที่ปล่อยไปแล้ว

ตัวอย่าง

Reader := Workbook.CreateFormulaCacheReader;
if Reader.TryGetCachedFormulaValue(1, 4, 2, Info) then
  Memo1.Lines.Add(VarToStr(Info.Value))
else if Info.State = xlfcsMissing then
  Memo1.Lines.Add('Formula has no stored result');

ดูเพิ่มเติม