مستندات HotXLS

تقييم الصيغ السياقي

تكشف أوراق العمل الكلاسيكية 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);

انظر أيضًا

الأسلوب TXLSWorksheet.Calculate
الأسلوب IXLSWorkbook.Calculate
محرك حساب Excel