Método CreateReadOnlyView
Cria uma visão leve somente leitura sobre um modelo de pasta de trabalho XLS clássica ou XLSX carregado
Sintaxe
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView é declarado pelo IXLSWorkbook clássico em lxHandle e pelo IXLSXWorkbookOwner XLSX em lxHandleX; a interface de visão compartilhada, as opções e os tipos de instantâneo são declarados em lxStandard
Estado e tempo de vida da visão
Criar uma visão leva tempo constante e não percorre planilhas, células, estilos, nomes nem desenhos
Cada visão tem seu próprio ActiveSheetIndexcom base um, de modo que várias visões podem selecionar planilhas diferentes sem alterar o ActiveSheetIndex clássico ou o ActiveIndex, IsSelectede ActiveTab
A visão mantém uma concessão de leitura enquanto existe, e as mutações da pasta de trabalho falham imediatamente com EXLSWorkbookWriteGuardUnavailable antes de alterar o modelo
Mantenha pastas de trabalho clássicas por meio de IXLSWorkbook e pastas de trabalho XLSX por meio de IXLSXWorkbookOwner ao usar visões; a interface de proprietário e cada visão retêm então a mesma pasta de trabalho com contagem de referências e podem ser liberadas em qualquer ordem
Não chame Free em um TXLSWorkbook ou TXLSXWorkbook concreto enquanto uma interface de proprietário ou visão ainda o referencia
Instantâneos de células
TryReadCell usa coordenadas de linha e coluna com base um na planilha ativa da visão e retorna False somente quando não existe célula armazenada nessa coordenada
Uma leitura de célula ausente não cria armazenamento nem avança a geração da pasta de trabalho
TXLSReadOnlyCellSnapshot é proprietário do nome da planilha, valor, texto da fórmula, informações de cache e de avaliação, coordenadas, tipo e índice de estilo, e nunca expõe um objeto de pasta de trabalho gravável
| Campo | Significado |
|---|---|
SheetIndex / SheetName | Identidade da planilha no escopo da visão |
Row / Col | Coordenadas de célula com base um |
StyleIndex | Índice XF clássico armazenado ou índice de formato de célula XLSX |
Kind | Classificação texto, número, data-hora, Boolean, fórmula, erro ou em branco |
Value | Valor escalar armazenado ou valor do cache de fórmula sem recálculo |
HasFormulaCache / FormulaCache | Presença e procedência do cache de fórmula, tipo de valor e valor em cache próprioTXLSFormulaCacheState), value kind (TXLSFormulaCacheValueKind), and owned cached value |
FormulaEvaluation | A TXLSFormulaEvaluationInfo record whose TXLSFormulaEvaluationState Se a avaliação não era aplicável, não foi solicitada, foi calculada ou falhou, além do código de resultado do avaliador e do valor de resultado próprio |
Formula | Vazia por padrão e preenchida somente quando o texto da fórmula é habilitado explicitamente |
Política de fórmulas
Por padrão, células com fórmula usam o cache armazenado existente e nunca calculam, invocam uma função do usuário, atualizam o estado de pendência nem gravam um cache de volta na pasta de trabalho
Add xlsvIncludeFormulaText Adicione Options a TXLSReadOnlyViewOptions = set of TXLSReadOnlyViewOptionquando o texto da fórmula for necessário; o Classic cria um decodificador privado da visão sob demanda, enquanto o XLSX copia sua cadeia de fórmula armazenada, e nenhum dos caminhos inicializa ou modifica a calculadora da pasta de trabalho
Uma fórmula sem cache carregado ou calculado relata HasFormulaCache=False e deixa Value como Unassigned
Adicione xlsvEvaluateFormulas para avaliar fórmulas por meio de uma calculadora privada da visão, estado de recursão, cache escalar, cache de matriz e cache de fórmulas compiladas XLSX; o Value resultante e FormulaEvaluation.Value nunca substituem o cache armazenado da pasta de trabalho nem os campos de runtime de fórmulas compiladas
Erros padrão de planilha são retornados como valores de erro Variant com xlfesCalculated, enquanto falhas de avaliação não suportadas ou internas relatam xlfesFailed e retêm o cache armazenado original em FormulaCache
Leituras repetidas por uma mesma visão reutilizam seu cache de avaliação privado para a geração da concessão, enquanto visões diferentes permanecem independentes e podem avaliar a mesma fórmula compartilhada simultaneamente
A avaliação de fórmulas externas do XLSX lê somente o cache externalLink local do arquivo e nunca desreferencia um registro fraco de pasta de trabalho ativa nem realiza E/S externa
Threading e desempenho
Use uma visão por thread de trabalho; visões separadas podem examinar planilhas diferentes ou avaliar a mesma fórmula simultaneamente, enquanto os chamadores não devem mutar a planilha ativa ou as opções de uma visão a partir de outra thread
Após a criação, leituras comuns de células não entram em um monitor ou seção crítica, porque a concessão impede a mutação concorrente da pasta de trabalho
A validação de liberação mantém cada visão ociosa abaixo de 64 KiB de estado fixo, cem visões ociosas abaixo de 8 MiB, e a criação de visões independente do tamanho da pasta de trabalho, com um limite p95 de um milissegundo em um modelo de um milhão de células
O conjunto de testes de desempenho também limita o efeito de uma visão ociosa sobre varreduras de cursor existentes de thread única a cinco por cento e exige que oito visões examinando planilhas independentes atinjam pelo menos cinco vezes a taxa de transferência de visão única no host de validação
Exemplo
var
Workbook: IXLSWorkbook;
View: IXLSReadOnlyWorkbookView;
Cell: TXLSReadOnlyCellSnapshot;
begin
Workbook := TXLSWorkbook.Create;
Workbook.Sheets.Add;
Workbook.Sheets[1].Cells[1, 1].Value := 'ready';
View := Workbook.CreateReadOnlyView;
View.Options := [xlsvEvaluateFormulas];
if View.TryReadCell(1, 1, Cell) then
Memo1.Lines.Add(VarToStr(Cell.Value));
end;Para XLSX, mantenha a pasta de trabalho concreta por meio de sua interface de proprietário antes de criar visões
var
Owner: IXLSXWorkbookOwner;
Workbook: TXLSXWorkbook;
View: IXLSReadOnlyWorkbookView;
begin
Workbook := TXLSXWorkbook.Create;
Owner := Workbook;
Workbook.Sheets.Add('Data').Cells[1, 1].Value := 42;
View := Owner.CreateReadOnlyView;
end;