Документація 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

Відомості про кеш

Запис TXLSFormulaCacheInfo класифікує кеш через два перелічення, оголошені в lxStandard: State має тип TXLSFormulaCacheState, а Kind — TXLSFormulaCacheValueKind

ПолеЗначення
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated або xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean або xlfcvError
ValueВласне кешоване значення Variant, коли метод повертає True, інакше Unassigned

Порожні результати, порожні рядки, логічне false, числовий нуль і помилки зберігають власні види й не використовуються як заступники наявності кешу

Числові кеші BIFF залишаються Double, оскільки запис не має маркера типу дати; кеші помилок повертаються як varError

Для пакетних книг значення дат OOXML t="d" та ODF повертають varDate, OOXML t="e" — 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');

Див. також