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
| Pole | Znaczenie |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedlub xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanlub xlfcvError |
Value | Należą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');