Метод 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
За пакетни работни книги OOXML t="d" и ODS стойности за дата връщат varDate, OOXML t="e" връща varError, а кеширана ODS празна клетка се запазва с типа на стойността 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');