TryGetCachedFormulaValue metoda
Čita uskladišteni rezultat formule bez njenog izračunavanja i bez menjana stanja radne sveske
Metoda je dostupna i na IXLSWorkbook i na TXLSXWorkbook; implementacija za radne sveske paketa pokriva datoteke XLSX i ODS
Kod nezavistan od mehanizma može od bilo kog mehanizma da dobije IXLSFormulaCacheReader preko CreateFormulaCacheReader i da koristi istu metodu upita
Sintaksa
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Koordinate i povratna vrednost
SheetIndex, Rowi Col počinju od jedan
Metoda vraća True samo za ćeliju sa formulom čije je stanje keša xlfcsLoaded ili xlfcsCalculated
Nevažeće koordinate, nepostojeće ćelije i ćelije bez formule vraćaju False sa xlfcsNotFormula
Formula bez uskladištenog rezultata vraća False sa xlfcsMissing; nekada keširana formula čija se formula ili izračun pokvarili nakon mutacije vraća False sa xlfcsInvalidated
Podaci o kešu
Zapis TXLSFormulaCacheInfo klasifikuje keš kroz dva nabrajanja deklarisana u lxStandard: State je TXLSFormulaCacheState , a Kind a TXLSFormulaCacheValueKind
| Polje | Značenje |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedili xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanili xlfcvError |
Value | Keširana Variant vrednost u vlasništvu kada metoda vrati True, inače Unassigned |
Prazni rezultati, prazni stringovi, Bulova vrednost false, numerička nula i greške zadržavaju različite vrste i ne koriste se kao zamenski pokazatelji postojanja keša
Numerički BIFF keševi ostaju Double jer zapis nema oznaku tipa datuma; keševi grešaka vraćaju se kao varError
Kod radnih sveski paketa OOXML t="d" i ODF vrednosti datuma vraćaju varDate, OOXML t="e" vraća varError, a ODF keširana prazna ćelija zadržava se sa tipom vrednosti void value type
Promena formule poništava važenje njenog prethodnog keša, dok dodela keširane vrednosti, a zatim i same formule, beleži izračunat keš
Svaki član deljene formule zadržava sopstveno postojanje keša i vrednost; sledbenik bez uskladištenog rezultata izveštava xlfcsMissing umesto da nasledi keš korenskog člana
Ugovor bez izračunavanja
Metoda izvodi direktno pretraživanje razređenih ćelija i nikada ne poziva izračunavač, povratni poziv korisničke funkcije, dekompilaciju tokena formule, ažuriranja zavisnosti, upise u keš niti promene stanja neažurnosti
Kada je izračunavanje potrebno, koristite uobičajeno svojstvo Value ćelije
Trajanje života čitača
CreateFormulaCacheReader vraća prilagodnik samo za čitanje potkrepljen zakupom u trajanju života radne sveske, bez prenosa vlasništva nad radnom sveskom
Nakon uništenja radne sveske svaki upit kroz taj prilagodnik podiže EXLSFormulaCacheReaderInvalidated umesto da dereferencira oslobođeno stanje radne sveske
Primer
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');