Método TryGetCachedFormulaValue
Lee un resultado de fórmula almacenado sin evaluar la fórmula ni cambiar el estado del libro
El método está disponible tanto en IXLSWorkbook como en TXLSXWorkbook; la implementación de libros de paquete cubre los archivos XLSX y ODS
El código independiente del motor puede obtener un IXLSFormulaCacheReader de cualquiera de los dos motores mediante CreateFormulaCacheReader y usar el mismo método de consulta
Sintaxis
function TryGetCachedFormulaValue( SheetIndex, Row, Col: Integer; out AInfo: TXLSFormulaCacheInfo): Boolean;
Coordenadas y valor devuelto
SheetIndex, Rowy Col están basados en uno
El método devuelve True solo para una celda de fórmula cuyo estado de caché sea xlfcsLoaded o xlfcsCalculated
Las coordenadas no válidas, las celdas ausentes y las celdas sin fórmula devuelven False con xlfcsNotFormula
Una fórmula sin resultado almacenado devuelve False con xlfcsMissing; una fórmula anteriormente en caché cuya fórmula o cálculo falló después de una modificación devuelve False con xlfcsInvalidated
Información de la caché
The TXLSFormulaCacheInfo clasifica la caché mediante dos enumeraciones declaradas en lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind
| Campo | Significado |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated, or xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean, or xlfcvError |
Value | El Variant almacenado en caché de propiedad del llamador cuando el método devuelve True; de lo contrario, Unassigned |
Los resultados en blanco, las cadenas vacías, el valor booleano false, el cero numérico y los errores conservan clases distintas y no se usan como sustitutos de la presencia de caché
Las cachés numéricas BIFF permanecen como Double porque el registro no tiene marcador de tipo de fecha; las cachés de error se devuelven como varError
En los libros de paquete, los valores de fecha OOXML t="d" y ODF devuelven varDate, OOXML t="e" devuelve varError, y un valor en blanco de ODF en caché se conserva con el tipo de valor void value type
Cambiar una fórmula invalida su caché anterior, mientras que asignar un valor en caché y después asignar su fórmula registra una caché calculada
Cada miembro de una fórmula compartida conserva su propia presencia y valor en caché; un miembro seguidor sin resultado almacenado informa xlfcsMissing en lugar de heredar la caché del miembro raíz
Contrato de ausencia de cálculo
El método realiza una búsqueda directa en celdas dispersas y nunca invoca la calculadora, una devolución de llamada de función de usuario, la descodificación de tokens de fórmula, actualizaciones de dependencias, escrituras en la caché ni cambios de estado de modificación
Use la propiedad Value normal de la celda cuando se necesite calcular
Tiempo de vida del lector
CreateFormulaCacheReader devuelve un adaptador de solo lectura respaldado por una concesión ligada al tiempo de vida del libro, sin transferir la propiedad del libro
Después de destruir el libro, cualquier consulta a través de ese adaptador genera EXLSFormulaCacheReaderInvalidated en lugar de desreferenciar el estado del libro ya liberado
Ejemplo
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');