Metoden TryGetCachedFormulaValue
Läser ett lagrat formelresultat utan att utvärdera formeln eller ändra arbetsbokens tillstånd
Metoden är tillgänglig i både IXLSWorkbook och TXLSXWorkbook; paketarbetsbokens implementering omfattar XLSX- och ODS-filer
Motorneutral kod kan hämta en IXLSFormulaCacheReader från någon av motorerna via CreateFormulaCacheReader och använda samma frågemetod
Syntax
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Koordinater och returvärde
SheetIndex, Rowoch Col är ettbaserade
Metoden returnerar True endast för en formelcell vars cachestatus är xlfcsLoaded eller xlfcsCalculated
Ogiltiga koordinater, saknade celler och icke-formelceller returnerar False med xlfcsNotFormula
En formel utan lagrat resultat returnerar False med xlfcsMissing; en tidigare cachad formel vars formel eller beräkning misslyckades efter en mutation returnerar False med xlfcsInvalidated
Cacheinformation
The TXLSFormulaCacheInfo post klassificerar cachen via två enum som deklareras i lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind
| Fält | Betydelse |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedeller xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleaneller xlfcvError |
Value | Det egna cachade Variant-värdet när metoden returnerar True, annars Unassigned |
Tomma resultat, tomma strängar, booleskt falskt, numerisk nolla och fel behåller distinkta typer och används inte som proxy för cacheförekomst
BIFF-numeriska cacher förblir Double eftersom posten saknar datypsmarkör; felcacher returneras som varError
För paketarbetsböcker returnerar OOXML t="d" och ODF-datumvärden varDate, OOXML t="e" returnerar varError, och en ODF-cachad tomcell bevaras med värdetypen void value type
Att ändra en formel ogiltigförklarar dess tidigare cache, medan tilldelning av ett cachat värde följt av tilldelning av dess formel registrerar en beräknad cache
Varje delad formelmedlem behåller sin egen cacheförekomst och sitt eget värde; en följarformel utan lagrat resultat rapporterar xlfcsMissing i stället för att ärva rotmedlemmens cache
Kontrakt utan beräkning
Metoden utför en direkt uppslagning i den glesa cellagringen och anropar aldrig kalkylatorn, en återkallning för användarfunktioner, dekompilering av formeltoken, beroendeuppdateringar, cacheskrivningar eller ändringar av skräpstatusen
Använd cellens normala egenskap Value när beräkning krävs
Läsarens livstid
CreateFormulaCacheReader returnerar en skrivskyddad adapter som backas upp av ett lån med arbetsbokens livstid, utan att arbetsboksägarskapet överförs
Efter att arbetsboken har förstörts utlöser varje fråga via adaptern EXLSFormulaCacheReaderInvalidated i stället för att avreferera frigjort arbetsbokstillstånd
Exempel
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');