Метод 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');