HotXLS-documentatie

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

VeldBetekenis
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedof xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanof xlfcvError
ValueDe 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');

Zie ook