Метод 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
Сведения о кэше
The TXLSFormulaCacheInfo запись классифицирует кэш через два перечисления, объявленных в lxStandard: State is a TXLSFormulaCacheState and Kind a 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 value type
Изменение формулы делает её прежний кэш недействительным, а присваивание кэшированного значения с последующим присваиванием её формулы записывает вычисленный кэш
Каждый член общей формулы удерживает собственное наличие и значение кэша; последователь без сохранённого результата сообщает 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');