مستندات HotXLS

متد TryGetCachedFormulaValue

نتیجه ذخیره‌شده فرمول را بدون ارزیابی فرمول یا تغییر وضعیت کتاب کار می‌خواند

این متد هم روی IXLSWorkbook و هم روی TXLSXWorkbook در دسترس است؛ پیاده‌سازی کتاب کار بسته، فایل‌های XLSX و ODS را پوشش می‌دهد

کدِ بی‌طرف نسبت به موتور می‌تواند یک IXLSFormulaCacheReader از هر دو موتور از طریق CreateFormulaCacheReader بگیرد و از همان متد پرس‌وجو استفاده کند

نحو

function TryGetCachedFormulaValue(
  SheetIndex, Row, Col: Integer;
  out AInfo: TXLSFormulaCacheInfo): Boolean;

مختصات و مقدار بازگشتی

SheetIndex، Row و Col مبتنی بر یک هستند

متد فقط برای سلول فرمول‌دار True برمی‌گرداند؛ سلولی که وضعیت حافظه پنهان آن xlfcsLoaded یا xlfcsCalculated است

مختصات نامعتبر، سلول‌های غایب و سلول‌های غیرفرمولی False با xlfcsNotFormula برمی‌گردانند

فرمول بدون نتیجه ذخیره‌شده False با xlfcsMissing برمی‌گرداند؛ فرمولی که پیش‌تر حافظه پنهان داشته اما پس از تغییر، فرمول یا محاسبه‌اش شکست خورده است، False با xlfcsInvalidated برمی‌گرداند

اطلاعات حافظه پنهان

فیلدمعنی
StatexlfcsNotFormula، xlfcsMissing، xlfcsLoaded، xlfcsCalculated یا xlfcsInvalidated
KindxlfcvBlank، xlfcvNumber، xlfcvDateTime، xlfcvString، xlfcvBoolean یا xlfcvError
Valueمقدار Variant ذخیره‌شده در حافظه پنهان و متعلق به فراخوان وقتی متد True برمی‌گرداند، در غیر این صورت Unassigned

نتیجه‌های خالی، رشته‌های خالی، مقدار منطقی false، عدد صفر و خطاها نوع متمایز خود را حفظ می‌کنند و به‌جای نشانه حضور حافظه پنهان به کار نمی‌روند

حافظه‌های پنهان عددی BIFF از نوع Double می‌مانند، زیرا رکورد نشانگر نوع تاریخ ندارد؛ حافظه‌های پنهان خطا به‌صورت varError برگردانده می‌شوند

در کتاب‌های کاری بسته‌ای، مقادیر تاریخ t="d" در OOXML و تاریخ‌های ODF مقدار varDate برمی‌گردانند، t="e" در OOXML مقدار varError برمی‌گرداند و سلول خالی ذخیره‌شده در ODF با نوع مقدار void حفظ می‌شود

تغییر فرمول، حافظه پنهان پیشین آن را باطل می‌کند؛ در حالی که تخصیص مقدار ذخیره‌شده در حافظه پنهان و سپس تخصیص فرمول آن، حافظه پنهان محاسبه‌شده ثبت می‌کند

هر عضو فرمول اشتراکی، حضور و مقدار حافظه پنهان مخصوص به خود را حفظ می‌کند؛ عضو پیرو بدون نتیجه ذخیره‌شده به‌جای به‌ارث‌بردن حافظه پنهان عضو ریشه، xlfcsMissing گزارش می‌کند

قرارداد عدم محاسبه

متد جست‌وجوی مستقیم سلول خلوت انجام می‌دهد و هرگز ماشین حساب، فراخوان تابع کاربر، کدگشایی معکوس توکن‌های فرمول، به‌روزرسانی وابستگی‌ها، نوشتن در حافظه پنهان یا تغییر وضعیت کهنگی را فرا نمی‌خواند

برای محاسبه از خاصیت معمول Value سلول استفاده کنید

طول عمر خواننده

CreateFormulaCacheReader مبدلی فقط‌خواندنی بر پایه اجاره عمر کتاب کار برمی‌گرداند، بدون انتقال مالکیت کتاب کار

پس از نابودی کتاب کار، هر پرس‌وجو از طریق آن مبدل به‌جای ارجاع‌برداری از وضعیت آزادشده کتاب کار، استثنای EXLSFormulaCacheReaderInvalidated ایجاد می‌کند

مثال

Reader := Workbook.CreateFormulaCacheReader;
if Reader.TryGetCachedFormulaValue(1, 4, 2, Info) then
  Memo1.Lines.Add(VarToStr(Info.Value))
else if Info.State = xlfcsMissing then
  Memo1.Lines.Add('Formula has no stored result');

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