Documentație HotXLS

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âmpSemnificație
StatexlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated sau xlfcsInvalidated
KindxlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean sau xlfcvError
ValueVariant-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');

Consultați și