Dokumentacja HotXLS

Metoda TryGetCachedFormulaValue

Odczytuje zapisany wynik formuły bez jej obliczania i bez zmieniania stanu skoroszytu

Metoda jest dostępna zarówno w IXLSWorkbook , jak i w TXLSXWorkbook; implementacja skoroszytu pakietowego obejmuje pliki XLSX i ODS

Kod neutralny wobec silnika może uzyskać IXLSFormulaCacheReader od każdego z silników przez CreateFormulaCacheReader i używać tej samej metody zapytania

Składnia

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

Współrzędne i wartość zwracana

SheetIndex, Rowi Col używają numeracji od jedynki

Metoda zwraca True tylko dla komórki z formułą, której stan pamięci podręcznej to xlfcsLoaded lub xlfcsCalculated

Nieprawidłowe współrzędne, nieobecne komórki i komórki bez formuł zwracają False z xlfcsNotFormula

Formuła bez zapisanego wyniku zwraca False z xlfcsMissing; wcześniej cache'owana formuła, której formuła lub obliczanie zakończyły się błędem po modyfikacji, zwraca False z xlfcsInvalidated

Informacje o pamięci podręcznej

The TXLSFormulaCacheInfo klasyfikuje pamięć podręczną przez dwa typy wyliczeniowe zadeklarowane w lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind

PoleZnaczenie
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedlub xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanlub xlfcvError
ValueNależąca do migawki wartość Variant z pamięci podręcznej, gdy metoda zwraca True, w przeciwnym razie Unassigned

Wyniki puste, puste ciągi, logiczne false, liczbowe zero i błędy zachowują odrębne rodzaje i nie są używane jako zastępniki obecności pamięci podręcznej

Liczne pamięci podręczne BIFF pozostają typu Double , ponieważ rekord nie ma znacznika typu daty; pamięci podręczne błędów są zwracane jako varError

Dla skoroszytów pakietowych wartości dat OOXML t="d" i ODF zwracają varDate, OOXML t="e" zwraca varError, a cache'owana pusta komórka ODF jest zachowywana z typem wartości void value type

Zmiana formuły unieważnia jej dawną pamięć podręczną, natomiast przypisanie wartości z pamięci podręcznej, a następnie przypisanie jej formuły zapisuje obliczoną pamięć podręczną

Każdy członek formuły współdzielonej zachowuje własną obecność i wartość pamięci podręcznej; następnik bez zapisanego wyniku zgłasza xlfcsMissing zamiast dziedziczyć pamięć podręczną członka głównego

Kontrakt bez obliczania

Metoda wykonuje bezpośrednie wyszukiwanie w rozrzedzonej komórce i nigdy nie wywołuje kalkulatora, wywołania zwrotnego funkcji użytkownika, dekompilacji tokenów formuły, aktualizacji zależności, zapisów pamięci podręcznej ani zmian stanu zmienności

Gdy obliczanie jest wymagane, użyj zwykłej właściwości Value komórki

Czas życia czytnika

CreateFormulaCacheReader zwraca adapter tylko do odczytu oparty na dzierżawie na czas życia skoroszytu, bez przenoszenia własności skoroszytu

Po zniszczeniu skoroszytu każde zapytanie przez ten adapter zgłasza EXLSFormulaCacheReaderInvalidated zamiast dereferencjonować zwolniony stan skoroszytu

Przykład

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

Zobacz także