TryGetCachedFormulaValue-Methode
Liest ein gespeichertes Formelergebnis, ohne die Formel auszuwerten oder den Arbeitsmappenzustand zu ändern
Die Methode ist sowohl für IXLSWorkbook als auch für TXLSXWorkbookverfügbar; die Paket-Arbeitsmappenimplementierung deckt XLSX- und ODS-Dateien ab
Engine-neutraler Code kann von beiden Engines einen IXLSFormulaCacheReader über CreateFormulaCacheReader erhalten und dieselbe Abfragemethode verwenden
Syntax
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Koordinaten und Rückgabewert
SheetIndex, Rowund Col sind einsbasiert
Die Methode gibt nur für eine Formelzelle True zurück, deren Cache-Zustand xlfcsLoaded oder xlfcsCalculated
Ungültige Koordinaten, fehlende Zellen und Nicht-Formelzellen geben False mit xlfcsNotFormula
Eine Formel ohne gespeichertes Ergebnis gibt False mit xlfcsMissingzurück; eine früher zwischengespeicherte Formel, deren Formel oder Berechnung nach einer Änderung fehlgeschlagen ist, gibt False mit xlfcsInvalidated
Cache-Informationen
Der Datensatz TXLSFormulaCacheInfo klassifiziert den Cache über zwei in lxStandarddeklarierte Enums: State ist ein TXLSFormulaCacheState und Kind ein TXLSFormulaCacheValueKind
| Feld | Bedeutung |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedoder xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanoder xlfcvError |
Value | Der eigene zwischengespeicherte Variant, wenn die Methode Truezurückgibt, andernfalls Unassigned |
Leere Ergebnisse, leere Zeichenfolgen, boolesches false, numerische null und Fehler behalten unterschiedliche Arten und werden nicht als Stellvertreter für das Vorhandensein des Caches verwendet
BIFF-numerische Caches bleiben Double , da der Datensatz keinen Datumstyp-Marker besitzt; Fehlercaches werden als varError
Für Paket-Arbeitsmappen geben OOXML- t="d" - und ODF-Datumswerte varDatezurück, OOXML- t="e" gibt varErrorzurück, und ein ODF-Zwischenspeicher-Leerwert wird mit dem void -Werttyp bewahrt
Das Ändern einer Formel macht ihren früheren Cache ungültig, während die Zuweisung eines zwischengespeicherten Werts und anschließend die Zuweisung ihrer Formel einen berechneten Cache erfasst
Jedes Mitglied einer gemeinsamen Formel behält seine eigene Cache-Präsenz und seinen Wert; ein Follower ohne gespeichertes Ergebnis meldet xlfcsMissing , statt den Cache des Wurzelmitglieds zu erben
Kontrakt ohne Berechnung
Die Methode führt eine direkte Sparse-Zellensuche durch und ruft nie den Rechner, einen Benutzerfunktionsrückruf, die Formel-Token-Dekompilierung, Abhängigkeitsaktualisierungen, Cache-Schreibvorgänge oder Dirty-Zustandsänderungen auf
Verwenden Sie die normale Zelleigenschaft Value , wenn eine Berechnung erforderlich ist
Reader-Lebensdauer
CreateFormulaCacheReader gibt einen schreibgeschützten Adapter zurück, der auf einer Lease über die Arbeitsmappen-Lebensdauer beruht, ohne das Eigentum an der Arbeitsmappe zu übertragen
Nach der Zerstörung der Arbeitsmappe löst jede Abfrage über diesen Adapter EXLSFormulaCacheReaderInvalidated aus, statt freigegebene Arbeitsmappenzustände zu dereferenzieren
Beispiel
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');