Dokumentacija HotXLS

TryGetCachedFormulaValue metoda

Čita pohranjeni rezultat formule bez njezina izračunavanja i bez mijenjanja stanja radne knjige

Metoda je dostupna i na IXLSWorkbook i na TXLSXWorkbook; implementacija za radne knjige paketa pokriva datoteke XLSX i ODS

Kôd neovisan o mehanizmu može od bilo kojeg mehanizma dobiti IXLSFormulaCacheReader putem CreateFormulaCacheReader i upotrijebiti istu metodu upita

Sintaksa

function TryGetCachedFormulaValue(
  SheetIndex, Row, Col: Integer;
  out AInfo: TXLSFormulaCacheInfo): Boolean;

Koordinate i povratna vrijednost

SheetIndex, Row i Col broje od jedan

Metoda vraća True samo za ćeliju s formulom čije je stanje predmemorije xlfcsLoaded ili xlfcsCalculated

Nevažeće koordinate, nepostojeće ćelije i ćelije bez formule vraćaju False uz xlfcsNotFormula

Formula bez pohranjenog rezultata vraća False uz xlfcsMissing; nekada predmemorirana formula čija se formula ili izračun pokvarili nakon mutacije vraća False uz xlfcsInvalidated

Podaci o predmemoriji

TXLSFormulaCacheInfo zapis klasificira predmemoriju kroz dva nabrajanja deklarirana u lxStandard: State je TXLSFormulaCacheState, a Kind TXLSFormulaCacheValueKind

PoljeZnačenje
StatexlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated ili xlfcsInvalidated
KindxlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean ili xlfcvError
ValuePredmemorirana Variant vrijednost u vlasništvu kada metoda vrati True, inače Unassigned

Prazni rezultati, prazni znakovni nizovi, Booleova vrijednost false, numerička nula i pogreške zadržavaju različite vrste i ne upotrebljavaju se kao zamjenski pokazatelji postojanja predmemorije

Brojčane BIFF predmemorije ostaju Double jer zapis nema oznaku vrste datuma; predmemorije pogrešaka vraćaju se kao varError

Kod radnih knjiga paketa OOXML t="d" i ODS vrijednosti datuma vraćaju varDate, OOXML t="e" vraća varError, a ODS predmemorirana prazna ćelija zadržava se s vrstom vrijednosti void

Promjena formule poništava valjanost njezine prijašnje predmemorije, dok dodjela predmemorirane vrijednosti, a zatim i same formule, bilježi izračunatu predmemoriju

Svaki član dijeljene formule zadržava vlastitu prisutnost predmemorije i vrijednost; sljednik bez pohranjenog rezultata izvještava xlfcsMissing umjesto da naslijedi predmemoriju korijenskog člana

Ugovor bez izračunavanja

Metoda izvodi izravno pretraživanje razrjeđenih ćelija i nikada ne poziva izračunavač, povratni poziv korisničke funkcije, dekompilaciju tokena formule, ažuriranja ovisnosti, upise u predmemoriju niti promjene stanja neažurnosti

Kada je izračun potreban, upotrijebite uobičajeno svojstvo Value ćelije

Životni vijek čitača

CreateFormulaCacheReader vraća prilagodnik samo za čitanje potkrijepljen zakupom u trajanju života radne knjige, bez prijenosa vlasništva nad radnom knjigom

Nakon uništenja radne knjige svaki upit kroz taj prilagodnik podiže EXLSFormulaCacheReaderInvalidated umjesto da dereferencira oslobođeno stanje radne knjige

Primjer

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');

Vidi također