تكشف أوراق العمل الكلاسيكية XLS وXLSX عن واجهة برمجة للقراءة فقط نفسها لتقييم نص الصيغة كما لو قد أُدخلت في صف وعمود مختارين بترقيم يبدأ من الواحد
التقييم بلمسة واحدة
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 returns Status, the original typed Value, IsVolatile, and a stable Issue وهو سجل يحتوي على الحالة والكود الأصلي والرسالة
TXLSFormulaEvaluationStatus = (xlfeOk, xlfeInvalidArgument,
xlfeWorksheetUnavailable, xlfeParseError, xlfeUnsupportedFunction,
xlfeCircularReference, xlfeExternalReferenceDenied, xlfeCancelled,
xlfeResourceLimit, xlfeFailed, xlfeUnsafeFunctionDenied);
TXLSFormulaEvaluationIssue = record
Status: TXLSFormulaEvaluationStatus;
NativeCode: Integer;
Message: WideString;
end;
تعيد #DIV/0!القيمة #REF!والقيمة Issue.NativeCode الأصلية المنمّطة و Issue.Message وسجل Status مستقرًّا يضم الحالة والرمز الأصلي والرسالة xlfeOk
قوالب غير قابلة للتغيير قابلة لإعادة الاستخدام
function CreateFormulaEvaluationTemplate(Row, Col: Integer;
const Formula: WideString;
ReferenceStyle: TXLSFormulaReferenceStyle): IXLSFormulaEvaluationTemplate;
تترجم القالب الصيغة مرة واحدة عند مرساها وتكشف عن EvaluateAt و EvaluateAtWithOptions للتقييم المتكرر عند خلايا هدف مختلفة
تعيد صيغ A1 وR1C1 العادية استخدام الشجرة المترجمة مباشرة؛ أما المراجع الهيكلية بصيغة A1 التي يعتمد معناها على صف الجدول الهدف فتُحل وتُترجم لسياق ذلك الهدف
لا تحتفظ القوالب بأي حالة قابلة للكتابة من ورقة العمل، وتبلغ بأمان عن xlfeWorksheetUnavailable بعد إتلاف المصنف، وتتراجع إلى إعادة ترجمة مدركة للسياق عندما تجعل تغييرات المصنف سياق الترجمة الأصلي قديمًا
خيارات الموارد والمراجع الخارجية والدوال الردية
| AllowExternalReferences | قيمتها الافتراضية true لكنها تسمح فقط بأهداف مساحة عمل مسجلة صراحة أو ذاكرات محلية للملف، ولا تجري أبدًا وصولًا ضمنيًا إلى ملف أو شبكة |
| AllowUnsafeFormulaCallbacks | قيمتها الافتراضية false وتمنع أسماء الدوال الخطرة من الوصول إلى سجل دوال المستخدم أو دالة ردية قبل تقييم أي وسيط؛ ويعيد الرفض xlfeUnsafeFunctionDenied |
| CancelFlag | مؤشر منطقي اختياري يُفحص قبل التقييم وبعده |
| MaxFormulaLength | الافتراضي 8192 وحدة رمز UTF-16 |
| MaxEvaluationSteps | الافتراضي 1,000,000 تقييمًا لعناصر الصياغة |
| MaxRecursionDepth | الافتراضي 256 تقييمًا متداخلًا للصيغ |
| MaxArrayBytes | الافتراضي 64 ميجابايت لأحمال المصفوفات الناتجة |
يعطّل الحد الأقصى الصفري أو السالب ذلك الحد لكل استدعاء؛ ولا يزال سياسات ذاكرة المصفوفات على مستوى المصنف سارية، ويعيد بلوغ حد ممكّن 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);انظر أيضًا