HotXLS-Dokumentation

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

FeldBedeutung
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedoder xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanoder xlfcvError
ValueDer 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');

Siehe auch