کاربرگهای Classic 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 مقدار Status، Value نوعدار اصلی، IsVolatile و رکورد Issue پایداری شامل وضعیت، کد بومی و پیام را برمیگرداند
مقادیر فرمول مانند #DIV/0!، #REF!، رشتههای خالی، آرایهها، مقادیر منطقی و تاریخها مقادیری قابل تفکیک باقی میمانند؛ شکست تجزیه، توابع پشتیبانینشده، ارجاع دوری، ارجاعهای خارجی ممنوعشده، فراخوانیهای ناایمن ممنوعشده، لغو، آرگومانهای نامعتبر، کاربرگهای در دسترس نیست و ته منابع، وضعیتهای API صریحی دارند
قالبهای تغییرناپذیر قابل استفاده مجدد
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);
همچنین ببینید