Dokumentace HotXLS

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

PoleVýznam
StatexlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated nebo xlfcsInvalidated
KindxlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean nebo xlfcvError
ValueVlastně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');

Viz také