Metoda TryGetCachedFormulaValue
Čte uložený výsledek vzorce bez vyhodnocení vzorce a bez změny stavu sešitu
Metoda je k dispozici na IXLSWorkbook i TXLSXWorkbook; implementace balíčkového sešitu pokrývá soubory XLSX a ODS
Kód neutrální k enginu může získat IXLSFormulaCacheReader z obou engineů prostřednictvím CreateFormulaCacheReader a použít stejnou metodu dotazu
Syntaxe
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Souřadnice a návratová hodnota
SheetIndex, Row a Col jsou indexované od jedničky
Metoda vrátí True pouze pro buňku se vzorcem, jejíž stav mezipaměti je xlfcsLoaded nebo xlfcsCalculated
Neplatné souřadnice, chybějící buňky a buňky bez vzorce vrátí False s xlfcsNotFormula
Vzorec bez uloženého výsledku vrátí False s xlfcsMissing; dříve kešovaný vzorec, jehož vzorec nebo výpočet po mutaci selhal, vrátí False s xlfcsInvalidated
Informace o mezipaměti
| Pole | Význam |
|---|---|
State | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated nebo xlfcsInvalidated |
Kind | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean nebo xlfcvError |
Value | Vlastněný kešovaný Variant, když metoda vrátí True, jinak Unassigned |
Prázdné výsledky, prázdné řetězce, logická nepravda, numerická nula a chyby si uchovávají odlišné druhy a nepoužívají se jako zástupci přítomnosti mezipaměti
Číselné mezipaměti BIFF zůstávají Double, protože záznam nemá značku typu data; chybové mezipaměti se vracejí jako varError
U balíčkových sešitů vrací hodnoty data OOXML t="d" a ODF varDate, OOXML t="e" vrací varError a kešovaná prázdná hodnota ODF se zachová s typem hodnoty void
Změna vzorce zneplatní jeho dřívější mezipaměť, zatímco přiřazení kešované hodnoty a následné přiřazení vzorce zaznamená vypočtenou mezipaměť
Každý člen sdíleného vzorce si uchovává vlastní přítomnost a hodnotu mezipaměti; následník bez uloženého výsledku hlásí xlfcsMissing místo dědění mezipaměti kořenového členu
Kontrakt bez výpočtu
Metoda provádí přímé vyhledání v řídkých buňkách a nikdy nevolá kalkulátor, zpětné volání uživatelské funkce, dekompilaci tokenů vzorce, aktualizace závislostí, zápisy do mezipaměti ani změny stavu neaktuálnosti
Pokud je výpočet vyžadován, použijte běžnou vlastnost Value buňky
Životnost čtečky
CreateFormulaCacheReader vrací adaptér jen pro čtení podložený rezervací na životnost sešitu bez převodu vlastnictví sešitu
Po zničení sešitu vyvolá jakýkoli dotaz přes tento adaptér EXLSFormulaCacheReaderInvalidated místo dereference uvolněného stavu sešitu
Pří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');