Méthode TryGetCachedFormulaValue
Lit un résultat de formule stocké sans évaluer la formule ni modifier l'état du classeur
La méthode est disponible sur IXLSWorkbook et TXLSXWorkbook; l'implémentation du classeur de package couvre les fichiers XLSX et ODS
Le code indépendant du moteur peut obtenir un IXLSFormulaCacheReader de l'un ou l'autre moteur via CreateFormulaCacheReader et utiliser la même méthode de requête
Syntaxe
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Coordonnées et valeur de retour
SheetIndex, Rowet Col sont en base 1
La méthode renvoie True uniquement pour une cellule à formule dont l'état de cache est xlfcsLoaded ou xlfcsCalculated
Les coordonnées invalides, les cellules absentes et les cellules sans formule renvoient False avec xlfcsNotFormula
Une formule sans résultat stocké renvoie False avec xlfcsMissing; une formule anciennement en cache dont la formule ou le calcul a échoué après mutation renvoie False avec xlfcsInvalidated
Informations de cache
The TXLSFormulaCacheInfo record classe le cache via deux enums déclarés dans lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind
| Champ | Signification |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedou xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanou xlfcvError |
Value | Le Variant en cache détenu lorsque la méthode renvoie True, sinon Unassigned |
Les résultats vides, les chaînes vides, les booléens false, les zéros numériques et les erreurs conservent des types distincts et ne sont pas utilisés comme substituts de la présence du cache
Les caches numériques BIFF restent des Double car l'enregistrement ne comporte pas de marqueur de type date ; les caches d'erreurs sont renvoyés comme varError
Pour les classeurs de package, les valeurs de date OOXML t="d" et ODF renvoient varDate, OOXML t="e" renvoie varError, et un vide en cache ODF est préservé avec le type de valeur void value type
Modifier une formule invalide son ancien cache, tandis qu'assigner une valeur en cache puis assigner sa formule enregistre un cache calculé
Chaque membre d'une formule partagée conserve sa propre présence et valeur en cache ; un suiveur sans résultat stocké signale xlfcsMissing au lieu d'hériter du cache du membre racine
Contrat sans calcul
La méthode effectue une recherche directe dans les cellules clairsemées et n'invoque jamais la calculatrice, un callback de fonction utilisateur, la décompilation de jetons de formule, les mises à jour de dépendances, les écritures de cache ni les changements d'état de modification
Utilisez la propriété Value normale de la cellule lorsqu'un calcul est requis
Durée de vie du lecteur
CreateFormulaCacheReader renvoie un adaptateur en lecture seule adossé à un bail de durée de vie du classeur sans transférer la propriété du classeur
Après la destruction du classeur, toute requête via cet adaptateur lève EXLSFormulaCacheReaderInvalidated au lieu de déréférencer un état de classeur libéré
Exemple
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');