TryGetCachedFormulaValue-methode
Leest een opgeslagen formuleresultaat zonder de formule te evalueren of de werkmapstatus te wijzigen
De methode is beschikbaar op zowel IXLSWorkbook als TXLSXWorkbook; de pakketwerkmapimplementatie dekt XLSX- en ODS-bestanden af
Engineneutrale code kan van beide engines een IXLSFormulaCacheReader verkrijgen via CreateFormulaCacheReader en dezelfde querymethode gebruiken
Syntaxis
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Coördinaten en retourwaarde
SheetIndex, Rowen Col hebben basis 1
De methode geeft alleen True terug voor een formulecel waarvan de cachestatus xlfcsLoaded of xlfcsCalculated
Ongeldige coördinaten, ontbrekende cellen en niet-formulecellen geven False terug met xlfcsNotFormula
Een formule zonder opgeslagen resultaat geeft False terug met xlfcsMissing; een eerder gecachte formule waarvan de formule of berekening na een mutatie is mislukt, geeft False terug met xlfcsInvalidated
Cache-informatie
Het record TXLSFormulaCacheInfo classificeert de cache via twee enums die in lxStandardgedeclareerd zijn: State is een TXLSFormulaCacheState en Kind een TXLSFormulaCacheValueKind
| Veld | Betekenis |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedof xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanof xlfcvError |
Value | De eigen gecachte Variant wanneer de methode Trueteruggeeft, anders Unassigned |
Lege resultaten, lege tekenreeksen, booleaans false, numerieke nul en fouten behouden onderscheiden soorten en worden niet gebruikt als vervanger voor de aanwezigheid van de cache
BIFF-numerieke caches blijven Double omdat het record geen datumtype-aanduiding heeft; foutcaches worden teruggegeven als varError
Voor pakketwerkmappen geven OOXML- t="d" - en ODF-datumwaarden varDateterug, OOXML- t="e" geeft varErrorterug, en een ODF-gecachte lege waarde blijft behouden met het void -waardetype
Het wijzigen van een formule maakt de vroegere cache ongeldig, terwijl het toewijzen van een gecachte waarde en daarna het toewijzen van de formule een berekende cache registreert
Elk lid van een gedeelde formule behoudt zijn eigen cacheaanwezigheid en waarde; een volgend lid zonder opgeslagen resultaat meldt xlfcsMissing in plaats van de cache van het hoofdlid te erven
Contract zonder berekening
De methode voert een rechtstreekse opzoeking in de sparse cellen uit en roept nooit de calculator, een gebruikersfunctie-callback, decompilatie van formuletokens, afhankelijkheidsupdates, cachewegschrijvingen of wijzigingen van de dirty-status aan
Gebruik de normale celeigenschap Value wanneer berekening nodig is
Levensduur van de reader
CreateFormulaCacheReader geeft een alleen-lezen adapter terug die steunt op een lease voor de levensduur van de werkmap, zonder het eigendom van de werkmap over te dragen
Na vernietiging van de werkmap veroorzaakt elke query via die adapter EXLSFormulaCacheReaderInvalidated in plaats van vrijgegeven werkmapstatus te dereferentiëren
Voorbeeld
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');