Dokumentácia HotXLS

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

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

Pozri tiež