Método TryGetCachedFormulaValue
Lee un resultado de fórmula almacenado sin evaluar la fórmula ni cambiar el estado del libro de trabajo
El método está disponible tanto en IXLSWorkbook como en TXLSXWorkbook; la implementación de libros de paquete cubre archivos XLSX y ODS
El código independiente del motor puede obtener un IXLSFormulaCacheReader de cualquier motor 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 invá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ó tras una modificación devuelve False con xlfcsInvalidated
Información de la caché
The TXLSFormulaCacheInfo registro clasifica la caché mediante dos enums declarados 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 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 tipos distintos 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 blanco en caché de ODF 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 retiene su propia presencia y valor en caché; un miembro seguidor sin resultado almacenado reporta xlfcsMissing en lugar de heredar la caché del miembro raíz
Contrato de no 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 decodificación de tokens de fórmula, actualizaciones de dependencias, escrituras en la caché ni cambios de estado de modificación
Utilice la propiedad Value normal de la celda cuando se requiera 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 de trabajo, sin transferir la propiedad del libro de trabajo
Después de que el libro de trabajo se destruya, cualquier consulta a través de ese adaptador genera EXLSFormulaCacheReaderInvalidated en lugar de desreferenciar el estado del libro de trabajo 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');