متد 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 برمیگرداند
اطلاعات حافظه پنهان
| فیلد | معنی |
|---|---|
State | xlfcsNotFormula، xlfcsMissing، xlfcsLoaded، xlfcsCalculated یا xlfcsInvalidated |
Kind | xlfcvBlank، 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');