HotXLS dokumentáció

TryGetCachedFormulaValue metódus

Beolvassa a tárolt képleteredményt a képlet kiértékelése és a munkafüzet állapotának módosítása nélkül

A metódus az IXLSWorkbook és a TXLSXWorkbook esetében egyaránt elérhető; a csomag-alapú munkafüzet implementációja az XLSX és ODS fájlokat fedi le

Az engintől független kód IXLSFormulaCacheReader-t szerezhet mindkét engintől a CreateFormulaCacheReader segítségével, és ugyanazt a lekérdezési metódust használhatja

Szintaxis

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

Koordináták és visszatérési érték

A SheetIndex, Row és Col 1-alapú

A metódus csak olyan képletcellára ad True értéket, amelynek gyorsítótár-állapota xlfcsLoaded vagy xlfcsCalculated

Az érvénytelen koordináták, a hiányzó cellák és a nem képletcellák False értéket adnak xlfcsNotFormula állapottal

Egy tárolt eredmény nélküli képlet False értéket ad xlfcsMissing állapottal; egy korábban gyorsítótárazott képlet, amelynek képlete vagy számítása mutáció után meghiúsult, False értéket ad xlfcsInvalidated állapottal

Gyorsítótár-információk

A TXLSFormulaCacheInfo rekord két, a lxStandard egységben deklarált enummal sorolja be a gyorsítótárat: a State egy TXLSFormulaCacheState, a Kind pedig egy TXLSFormulaCacheValueKind

MezőJelentés
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated vagy xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean vagy xlfcvError
ValueA saját tulajdonú gyorsítótárazott Variant, ha a metódus True értéket ad vissza, egyébként Unassigned

Az üres eredmények, az üres karakterláncok, a logikai hamis, a numerikus nulla és a hibák megkülönböztetett típusokat őriznek meg, és nem használatosak a gyorsítótár-jelenlét helyettesítőiként

A BIFF numerikus gyorsítótárak Double maradnak, mert a rekordnak nincs dátumtípus-jelzője; a hibagyorsítótárak varError értékként térnek vissza

Csomag-alapú munkafüzeteknél az OOXML t="d" és az ODF dátumértékek varDate értéket adnak, az OOXML t="e" varError értéket ad, és egy ODF gyorsítótárazott üres érték a void értéktípussal őrződik meg

Egy képlet módosítása érvényteleníti korábbi gyorsítótárát, míg egy gyorsítótárazott érték hozzárendelése, majd a képlet hozzárendelése kiszámolt gyorsítótárat rögzít

Minden megosztott képlettag megtartja a saját gyorsítótár-jelenlétét és értékét; egy tárolt eredmény nélküli követő xlfcsMissing állapotot jelez a gyökértag gyorsítótárának öröklése helyett

Számítás nélküli szerződés

A metódus közvetlen ritkacella-keresést végez, és soha nem hívja meg a kalkulátort, felhasználói függvény visszahívást, képlettoken-dekompilációt, függőségfrissítéseket, gyorsítótár-írásokat vagy módosultsági állapotváltozásokat

Ha számítás szükséges, használja a cella szokásos Value tulajdonságát

Az olvasó élettartama

A CreateFormulaCacheReader csak olvasható adaptort ad vissza, amelyet a munkafüzet élettartamára szóló foglalás támogat, a munkafüzet tulajdonjogának átruházása nélkül

A munkafüzet megsemmisítése után bármely ezen az adaptáron keresztüli lekérdezés EXLSFormulaCacheReaderInvalidated kivételt vált ki a felszabadított munkafüzet-állapot dereferálása helyett

Példa

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

Lásd még