เวิร์กชีตแบบ Classic XLS และ XLSX เปิดเผย API แบบอ่านอย่างเดียวชุดเดียวกันสำหรับการประเมินข้อความสูตร ราวกับว่าสูตรถูกป้อนไว้ที่แถวและคอลัมน์ที่เลือกซึ่งเริ่มนับจาก 1
การประเมินแบบครั้งเดียวจบ
function EvaluateFormulaAt(Row, Col: Integer;
const Formula: WideString): TXLSFormulaEvaluationResult; overload;
function EvaluateFormulaAt(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle;
const Options: TXLSFormulaEvaluationOptions): TXLSFormulaEvaluationResult; overload;
เวิร์กชีตจัดเตรียมบริบทชื่อท้องถิ่น การอ้างอิงแบบไม่ระบุคุณสมบัติ ตาราง และลิงก์ภายนอกให้ โดยไม่เปลี่ยนเวิร์กชีตที่ใช้งาน การเลือก โมเดลเซลล์ แคชสูตร สถานะความไม่สดใหม่ หรือกราฟการพึ่งพา
xlfrsA1 คงการอ้างอิงแบบสัมบูรณ์และแบบผสมไว้ พร้อมแก้การอ้างอิงแบบสัมพัทธ์จากเซลล์เป้าหมาย xlfrsR1C1 แก้ออฟเซตสัมพัทธ์โดยตรงจากเป้าหมายนั้น
ผลลัพธ์แบบมีชนิด
TXLSFormulaEvaluationResult ส่งกลับ Status, Value ดั้งเดิมแบบมีชนิด, IsVolatile และระเบียน Issue ที่เสถียรซึ่งมีสถานะ รหัสดั้งเดิม และข้อความ
ค่าสูตรเช่น #DIV/0!, #REF!, สตริงว่าง อาร์เรย์ ค่าตรรกะ และวันที่ ยังคงเป็นค่าที่แยกแยะได้ ส่วนการแยกวิเคราะห์ล้มเหลว ฟังก์ชันที่ไม่รองรับ การอ้างอิงวนรอบ การอ้างอิงภายนอกที่ถูกปฏิเสธ callback ที่ไม่ปลอดภัยที่ถูกปฏิเสธ การยกเลิก อาร์กิวเมนต์ไม่ถูกต้อง เวิร์กชีตไม่พร้อมใช้งาน และทรัพยากรหมด จะใช้สถานะ API ที่ระบุชัดเจน
เทมเพลตเปลี่ยนแปลงไม่ได้ที่ใช้ซ้ำได้
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
เทมเพลตคอมไพล์สูตรหนึ่งครั้งที่จุดยึด และเปิดเผย EvaluateAt และ EvaluateAtWithOptions สำหรับการประเมินซ้ำที่เซลล์เป้าหมายต่างกัน
สูตร A1 และ R1C1 ทั่วไปใช้ต้นไม้ที่คอมไพล์แล้วซ้ำโดยตรง ส่วนการอ้างอิงเชิงโครงสร้างแบบ A1 ที่ความหมายขึ้นกับแถวตารางของเป้าหมาย จะถูกแก้และคอมไพล์สำหรับบริบทเป้าหมายนั้น
เทมเพลตไม่คงสถานะเวิร์กชีตที่เขียนได้ไว้ รายงาน xlfeWorksheetUnavailable อย่างปลอดภัยหลังสมุดงานถูกทำลาย และย้อนกลับไปคอมไพล์ใหม่โดยคำนึงถึงบริบทเมื่อการเปลี่ยนแปลงสมุดงานทำให้บริบทที่คอมไพล์เดิมล้าสมัย
ตัวเลือกทรัพยากร การอ้างอิงภายนอก และ callback
| AllowExternalReferences | ค่าเริ่มต้นเป็น true แต่อนุญาตเฉพาะเป้าหมายพื้นที่ทำงานที่ลงทะเบียนชัดเจนหรือแคชเฉพาะไฟล์เท่านั้น และไม่ทำการเข้าถึงไฟล์หรือเครือข่ายโดยปริยายเด็ดขาด |
| AllowUnsafeFormulaCallbacks | ค่าเริ่มต้นเป็น false และปิดกั้นชื่อฟังก์ชันที่อันตรายไม่ให้ไปถึงทะเบียนฟังก์ชันผู้ใช้หรือ callback ก่อนที่จะประเมินอาร์กิวเมนต์ใด ๆ การปฏิเสธส่งกลับ xlfeUnsafeFunctionDenied |
| CancelFlag | พอยเตอร์บูลีนที่เลือกได้ซึ่งตรวจสอบก่อนและหลังการประเมิน |
| MaxFormulaLength | ค่าเริ่มต้น 8192 หน่วยรหัส UTF-16 |
| MaxEvaluationSteps | ค่าเริ่มต้น 1,000,000 การประเมินรายการไวยากรณ์ |
| MaxRecursionDepth | ค่าเริ่มต้น 256 การประเมินสูตรซ้อนกัน |
| MaxArrayBytes | ค่าเริ่มต้น 64 MiB สำหรับเพย์โหลดอาร์เรย์ที่สร้างขึ้น |
ค่าสูงสุดที่เป็นศูนย์หรือติดลบจะปิดใช้ขีดจำกัดต่อการเรียกนั้น นโยบายหน่วยความจำอาร์เรย์ระดับสมุดงานยังคงมีผลอยู่ และการไปถึงขีดจำกัดที่เปิดใช้จะส่งกลับ xlfeResourceLimit หลังปล่อยสถานะการประเมินชั่วคราว
โอเวอร์โหลดที่รับตัวเลือกอย่างชัดเจนถือว่า AllowUnsafeFormulaCallbacks เป็นตัวชี้ขาดสำหรับการเรียกนั้น การประเมินแบบครั้งเดียวจบค่าเริ่มต้นและการประเมินเทมเพลตสืบทอดคุณสมบัติชื่อเดียวกันของสมุดงาน
ตัวอย่าง Delphi
Template := Sheet.CreateFormulaEvaluationTemplate(2, 2,
'=R[-1]C[-1]+1', xlfrsR1C1);
Result := Template.EvaluateAt(2, 2);
if Result.Status = xlfeOk then
UseValue(Result.Value);
Options := XLSDefaultFormulaEvaluationOptions;
Options.MaxEvaluationSteps := 10000;
Result := Template.EvaluateAtWithOptions(20, 4, Options);
ตัวอย่าง C++Builder
Lxcalc::_di_IXLSFormulaEvaluationTemplate evalTemplate =
sheet->CreateFormulaEvaluationTemplate(1, 1,
WideString(L"=ROW()+COLUMN()"), Lxcalc::xlfrsA1);
Lxcalc::TXLSFormulaEvaluationResult result =
evalTemplate->EvaluateAt(7, 8);
ดูเพิ่มเติม