Docs HotXLS

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

ChampSignification
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedou xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanou xlfcvError
ValueLe 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');

Voir aussi