Metodo TryGetCachedFormulaValue
Legge un risultato di formula memorizzato senza valutare la formula né modificare lo stato del workbook
Il metodo è disponibile sia su IXLSWorkbook sia su TXLSXWorkbook; l'implementazione del workbook a pacchetto copre i file XLSX e ODS
Il codice indipendente dal motore può ottenere un IXLSFormulaCacheReader da uno dei due motori tramite CreateFormulaCacheReader e usare lo stesso metodo di interrogazione
Sintassi
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Coordinate e valore restituito
SheetIndex, Rowe Col sono in base 1
Il metodo restituisce True solo per una cella con formula il cui stato della cache è xlfcsLoaded o xlfcsCalculated
Coordinate non valide, celle assenti e celle senza formula restituiscono False con xlfcsNotFormula
Una formula senza risultato memorizzato restituisce False con xlfcsMissing; una formula in cache in precedenza la cui formula o il cui calcolo è fallito dopo una modifica restituisce False con xlfcsInvalidated
Informazioni sulla cache
The TXLSFormulaCacheInfo classifica la cache tramite due enum dichiarati in lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind
| Campo | Significato |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedo xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleano xlfcvError |
Value | Il Variant in cache di proprietà quando il metodo restituisce True, altrimenti Unassigned |
Risultati vuoti, stringhe vuote, booleani false, zeri numerici ed errori conservano tipi distinti e non vengono usati come proxy della presenza della cache
Le cache numeriche BIFF restano Double perché il record non ha un marcatore di tipo data; le cache di errore vengono restituite come varError
Per i workbook a pacchetto, i valori di data OOXML t="d" e ODF restituiscono varDate, OOXML t="e" restituisce varError, e un vuoto in cache ODF viene preservato con il tipo di valore void value type
Modificare una formula invalida la sua cache precedente, mentre assegnare un valore in cache e poi assegnare la sua formula registra una cache calcolata
Ogni membro di una formula condivisa conserva la propria presenza e valore in cache; un follower senza risultato memorizzato riporta xlfcsMissing invece di ereditare la cache del membro radice
Contratto di nessun calcolo
Il metodo esegue una ricerca diretta nelle celle sparse e non invoca mai il calcolatore, un callback di funzione utente, la decompilazione dei token della formula, gli aggiornamenti delle dipendenze, le scritture della cache né le modifiche dello stato delle modifiche
Usare la normale proprietà Value della cella quando è richiesto il calcolo
Durata di vita del reader
CreateFormulaCacheReader restituisce un adattatore di sola lettura supportato da un lease sulla durata di vita del workbook senza trasferire la proprietà del workbook
Dopo la distruzione del workbook, qualsiasi interrogazione tramite quell'adattatore genera EXLSFormulaCacheReaderInvalidated invece di dereferenziare lo stato del workbook rilasciato
Esempio
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');