เมธอด 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
ข้อมูลแคช
| ฟิลด์ | ความหมาย |
|---|---|
State | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated หรือ xlfcsInvalidated |
Kind | xlfcvBlank, 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');