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
| Campo | Significado |
|---|---|
State | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculated ou xlfcsInvalidated |
Kind | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBoolean ou xlfcvError |
Value | O 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');