Documentação do HotXLS

Método TryGetCachedFormulaValue

Lê um resultado de fórmula armazenado sem avaliar a fórmula nem alterar o estado da pasta de trabalho

O método está disponível tanto em IXLSWorkbook quanto em TXLSXWorkbook; a implementação de pasta de trabalho de pacote cobre arquivos XLSX e ODS

Código neutro de mecanismo pode obter um IXLSFormulaCacheReader de qualquer mecanismo por meio de CreateFormulaCacheReader e usar o mesmo método de consulta

Sintaxe

function TryGetCachedFormulaValue(
  SheetIndex, Row, Col: Integer;
  out AInfo: TXLSFormulaCacheInfo): Boolean;

Coordenadas e valor de retorno

SheetIndex, Rowe Col têm base um

O método retorna True apenas para uma célula com fórmula cujo estado de cache é xlfcsLoaded ou xlfcsCalculated

Coordenadas inválidas, células ausentes e células sem fórmula retornam False com xlfcsNotFormula

Uma fórmula sem resultado armazenado retorna False com xlfcsMissing; uma fórmula anteriormente em cache cuja fórmula ou cálculo falhou após uma mutação retorna False com xlfcsInvalidated

Informações de cache

The TXLSFormulaCacheInfo record classifica o cache através de dois enums declarados em lxStandard: State is a TXLSFormulaCacheState and Kind a TXLSFormulaCacheValueKind

CampoSignificado
State (TXLSFormulaCacheState)xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedou xlfcsInvalidated
Kind (TXLSFormulaCacheValueKind)xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanou xlfcvError
ValueO Variant em cache próprio quando o método retorna True; caso contrário, Unassigned

Resultados em branco, cadeias vazias, Boolean false, zero numérico e erros mantêm tipos distintos e não são usados como proxies para a presença de cache

Caches numéricos BIFF permanecem Double porque o registro não tem marcador de tipo de data; caches de erro são retornados como varError

Para pastas de trabalho de pacote, valores de data OOXML t="d" e ODF retornam varDate, OOXML t="e" retorna varError, e um em branco em cache ODF é preservado com o tipo de valor void value type

Alterar uma fórmula invalida seu cache anterior, enquanto atribuir um valor em cache e depois atribuir sua fórmula registra um cache calculado

Cada membro de fórmula compartilhada retém sua própria presença e valor de cache; um seguidor sem resultado armazenado relata xlfcsMissing em vez de herdar o cache do membro raiz

Contrato sem cálculo

O método executa uma pesquisa direta em células esparsas e nunca invoca a calculadora, um retorno de chamada de função do usuário, descompilação de tokens de fórmula, atualizações de dependências, gravações de cache ou alterações de estado de pendência

Use a propriedade Value normal da célula quando o cálculo for necessário

Tempo de vida do leitor

CreateFormulaCacheReader retorna um adaptador somente leitura respaldado por uma concessão pelo tempo de vida da pasta de trabalho, sem transferir a propriedade da pasta de trabalho

Depois que a pasta de trabalho é destruída, qualquer consulta por meio desse adaptador lança EXLSFormulaCacheReaderInvalidated em vez de desreferenciar o estado liberado da pasta de trabalho

Exemplo

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');

Veja também