مستندات HotXLS

ارزیابی فرمول زمینه‌ای

کاربرگ‌های 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);

همچنین ببینید

متد TXLSWorksheet.Calculate
متد IXLSWorkbook.Calculate
موتور محاسبه Excel