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
| Campo | Significado |
|---|---|
State (TXLSFormulaCacheState) | xlfcsNotFormula, xlfcsMissing, xlfcsLoaded, xlfcsCalculatedou xlfcsInvalidated |
Kind (TXLSFormulaCacheValueKind) | xlfcvBlank, xlfcvNumber, xlfcvDateTime, xlfcvString, xlfcvBooleanou xlfcvError |
Value | O 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');