Metóda TryGetCachedFormulaValue
Číta uložený výsledok vzorca bez vyhodnotenia vzorca a bez zmeny stavu zošita
Metóda je k dispozícii na IXLSWorkbook aj TXLSXWorkbook; implementácia balíkového zošita pokrýva súbory XLSX a ODS
Kód neutrálny k enginu môže získať IXLSFormulaCacheReader z oboch enginov prostredníctvom CreateFormulaCacheReader a použiť rovnakú metódu dotazu
Syntax
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Súradnice a návratová hodnota
SheetIndex, Row a Col sú indexované od jednotky
Metóda vráti True len pre bunku so vzorcom, ktorej stav medzipamäti je xlfcsLoaded alebo xlfcsCalculated
Neplatné súradnice, chýbajúce bunky a bunky bez vzorca vrátia False s xlfcsNotFormula
Vzorec bez uloženého výsledku vráti False s xlfcsMissing; skôr kešovaný vzorec, ktorého vzorec alebo výpočet po mutácii zlyhal, vráti False s xlfcsInvalidated
Informácie o medzipamäti
| Pole | Význam |
|---|---|
State | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated alebo xlfcsInvalidated |
Kind | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean alebo xlfcvError |
Value | Vlastnený kešovaný Variant, keď metóda vráti True, inak Unassigned |
Prázdne výsledky, prázdne reťazce, logická nepravda, numerická nula a chyby si uchovávajú odlišné druhy a nepoužívajú sa ako zástupcovia prítomnosti medzipamäti
Číselné medzipamäti BIFF ostanú Double, pretože záznam nemá značku typu dátumu; chybové medzipamäti sa vracajú ako varError
Pri balíkových zošitoch vracajú hodnoty dátumu OOXML t="d" a ODF varDate, OOXML t="e" vracia varError a kešovaná prázdna hodnota ODF sa zachová s typom hodnoty void
Zmena vzorca zneplatní jeho skoršiu medzipamäť, zatiaľ čo priradenie kešovanej hodnoty a následné priradenie vzorca zaznamená vypočítanú medzipamäť
Každý člen zdieľaného vzorca si uchováva vlastnú prítomnosť a hodnotu medzipamäti; následník bez uloženého výsledku hlási xlfcsMissing namiesto dedenia medzipamäte koreňového člena
Kontrakt bez výpočtu
Metóda vykonáva priame vyhľadanie v riedkych bunkách a nikdy nevolá kalkulátor, spätné volanie používateľskej funkcie, dekompiláciu tokenov vzorca, aktualizácie závislostí, zápisy do medzipamäti ani zmeny stavu neaktuálnosti
Ak je výpočet vyžadovaný, použite bežnú vlastnosť Value bunky
Životnosť čítačky
CreateFormulaCacheReader vracia adaptér len na čítanie podložený rezerváciou na životnosť zošita bez prevodu vlastníctva zošita
Po zničení zošita vyvolá akýkoľvek dotaz cez tento adaptér EXLSFormulaCacheReaderInvalidated namiesto dereferencie uvoľneného stavu zošita
Príklad
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');