Documentação do HotXLS

Método TryGetCachedFormulaValue

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

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

Código neutro de motor pode obter um IXLSFormulaCacheReader de qualquer motor através de CreateFormulaCacheReader e utilizar o mesmo método de consulta

Sintaxe

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

Coordenadas e valor de retorno

SheetIndex, Row e Col têm base um

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

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

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

Informações de cache

CampoSignificado
StatexlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated ou xlfcsInvalidated
KindxlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean ou xlfcvError
ValueO Variant em cache próprio quando o método devolve 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 utilizados como proxies da presença de cache

As caches numéricas BIFF permanecem Double porque o registo não tem marcador de tipo de data; as caches de erro são devolvidas como varError

Para livros de trabalho de pacote, os valores de data OOXML t="d" e ODF devolvem varDate, o OOXML t="e" devolve varError, e um em branco em cache ODF é preservado com o tipo de valor void

Alterar uma fórmula invalida a respetiva cache anterior, enquanto atribuir um valor em cache e depois atribuir a respetiva fórmula regista uma cache calculada

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

Contrato sem cálculo

O método efetua uma pesquisa direta em células esparsas e nunca invoca a calculadora, uma callback de função do utilizador, a descompilação de tokens de fórmula, atualizações de dependências, escritas de cache ou alterações do estado de pendência

Utilize a propriedade Value normal da célula quando for necessário calcular

Tempo de vida do leitor

CreateFormulaCacheReader devolve um adaptador só de leitura suportado por uma concessão pelo tempo de vida do livro de trabalho, sem transferir a propriedade do livro de trabalho

Depois de o livro de trabalho ser destruído, qualquer consulta através desse adaptador levanta EXLSFormulaCacheReaderInvalidated em vez de desreferenciar o estado libertado do livro 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