Metoda TryGetCachedFormulaValue
Citește un rezultat de formulă stocat fără a evalua formula sau a schimba starea registrului de lucru
Metoda este disponibilă atât pe IXLSWorkbook, cât și pe TXLSXWorkbook; implementarea de registru de lucru pachet acoperă fișierele XLSX și ODS
Codul neutru față de motor poate obține un IXLSFormulaCacheReader de la oricare motor prin CreateFormulaCacheReader și poate folosi aceeași metodă de interogare
Sintaxă
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Coordonate și valoare returnată
SheetIndex, Row și Col au indexare de la 1
Metoda returnează True doar pentru o celulă cu formulă a cărei stare de cache este xlfcsLoaded sau xlfcsCalculated
Coordonatele invalide, celulele absente și celulele fără formulă returnează False cu xlfcsNotFormula
O formulă fără rezultat stocat returnează False cu xlfcsMissing; o formulă anterior în cache a cărei formulă sau calcul a eșuat după o mutație returnează False cu xlfcsInvalidated
Informații de cache
| Câmp | Semnificație |
|---|---|
State | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated sau xlfcsInvalidated |
Kind | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean sau xlfcvError |
Value | Variant-ul deținut din cache când metoda returnează True, altfel Unassigned |
Rezultatele goale, șirurile vide, booleanul false, zero-ul numeric și erorile păstrează tipuri distincte și nu sunt folosite ca înlocuitori pentru prezența cache-ului
Cache-urile numerice BIFF rămân Double deoarece înregistrarea nu are marcaj de tip dată; cache-urile de erori sunt returnate ca varError
Pentru registrele de lucru pachet, valorile de dată OOXML t="d" și ODF returnează varDate, OOXML t="e" returnează varError, iar un gol ODF aflat în cache este păstrat cu tipul de valoare void
Schimbarea unei formule invalidează cache-ul său anterior, în timp ce atribuirea unei valori în cache și apoi atribuirea formulei sale înregistrează un cache calculat
Fiecare membru al unei formule partajate își păstrează propria prezență și valoare de cache; un follower fără rezultat stocat raportează xlfcsMissing în loc să moștenească cache-ul membrului rădăcină
Contractul fără calcul
Metoda efectuează o căutare directă în celulele rare și nu invoacă niciodată calculatorul, un callback de funcție de utilizator, decompilarea token-urilor formulei, actualizări de dependențe, scrieri în cache sau schimbări de stare dirty
Utilizați proprietatea obișnuită Value a celulei când este necesar calculul
Durata de viață a reader-ului
CreateFormulaCacheReader returnează un adaptor doar-citire susținut de un lease pe durata de viață a registrului de lucru, fără a transfera proprietatea registrului de lucru
După distrugerea registrului de lucru, orice interogare prin acel adaptor ridică EXLSFormulaCacheReaderInvalidated în loc să dereferențieze starea eliberată a registrului de lucru
Exemplu
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');