Documentación HotXLS

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

CampoSignificado
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated, or xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean, or xlfcvError
ValueEl 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');

Véase también