Método CreateReadOnlyView
Cria uma vista leve só de leitura sobre um modelo de livro de trabalho XLS clássico ou XLSX carregado
Sintaxe
function CreateReadOnlyView: IXLSReadOnlyWorkbookView;
CreateReadOnlyView é declarado pelo IXLSWorkbook clássico em lxHandle e pelo IXLSXWorkbookOwner XLSX em lxHandleX; a interface de vista partilhada, as opções e os tipos de instantâneo são declarados em lxStandard
Estado e tempo de vida da vista
Criar uma vista demora tempo constante e não percorre folhas, células, estilos, nomes nem desenhos
Cada vista tem o seu próprio ActiveSheetIndex com base um, pelo que várias vistas podem selecionar folhas diferentes sem alterar o ActiveSheetIndex clássico nem o ActiveIndex, IsSelected e ActiveTab do XLSX
A vista mantém uma concessão de leitura enquanto existe, e as mutações do livro de trabalho falham imediatamente com EXLSWorkbookWriteGuardUnavailable antes de alterar o modelo
Mantenha livros de trabalho clássicos através de IXLSWorkbook e livros de trabalho XLSX através de IXLSXWorkbookOwner ao utilizar vistas; a interface de proprietário e cada vista retêm então o mesmo livro de trabalho com contagem de referências e podem ser libertados por qualquer ordem
Não chame Free num TXLSWorkbook ou TXLSXWorkbook concreto enquanto uma interface de proprietário ou vista ainda o referencia
Instantâneos de células
TryReadCell utiliza coordenadas de linha e coluna com base um na folha ativa da vista e devolve False apenas quando não existe célula armazenada nessa coordenada
Uma leitura de célula inexistente não cria armazenamento nem avança a geração do livro de trabalho
O TXLSReadOnlyCellSnapshot é proprietário do nome da folha, do valor, do texto da fórmula, das informações de cache e de avaliação, das coordenadas, do tipo e do índice de estilo, e nunca expõe um objeto de livro de trabalho mutável
| Campo | Significado |
|---|---|
SheetIndex / SheetName | Identidade da folha no âmbito da vista |
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 da cache de fórmula sem recálculo |
HasFormulaCache / FormulaCache | Presença e proveniência da cache de fórmula, tipo de valor e valor em cache próprio |
FormulaEvaluation | Se a avaliação não era aplicável, não foi pedida, foi calculada ou falhou, além do código de resultado do avaliador e do valor de resultado próprio |
Formula | Vazia por predefinição e preenchida apenas quando o texto da fórmula é ativado explicitamente |
Política de fórmulas
Por predefinição, as células com fórmula utilizam a cache armazenada existente e nunca calculam, invocam uma função do utilizador, atualizam o estado de pendência nem escrevem uma cache de volta no livro de trabalho
Adicione xlsvIncludeFormulaText a Options quando o texto da fórmula for necessário; o clássico cria um descodificador privado da vista a pedido, enquanto o XLSX copia a sua cadeia de fórmula armazenada, e nenhum dos caminhos inicializa ou modifica a calculadora do livro de trabalho
Uma fórmula sem cache carregada ou calculada comunica HasFormulaCache=False e deixa Value como Unassigned
Adicione xlsvEvaluateFormulas para avaliar fórmulas através de uma calculadora privada da vista, estado de recursão, cache escalar, cache de matriz e cache de fórmulas compiladas XLSX; o Value resultante e FormulaEvaluation.Value nunca substituem a cache armazenada do livro de trabalho nem os campos de runtime de fórmulas compiladas
Os erros padrão de folha de cálculo são devolvidos como valores de erro Variant com xlfesCalculated, enquanto as falhas de avaliação não suportadas ou internas comunicam xlfesFailed e mantêm a cache armazenada original em FormulaCache
Leituras repetidas através da mesma vista reutilizam a sua cache de avaliação privada para a geração da concessão, enquanto vistas diferentes permanecem independentes e podem avaliar concorrentemente a mesma fórmula partilhada
A avaliação de fórmulas externas do XLSX lê apenas a cache externalLink local do ficheiro e nunca desreferencia um registo fraco de livro de trabalho ativo nem efetua E/S externa
Threading e desempenho
Utilize uma vista por thread de trabalho; vistas separadas podem analisar folhas diferentes ou avaliar concorrentemente a mesma fórmula, mas os chamadores não devem mutar a folha ativa ou as opções de uma vista a partir de outra thread
Após a criação, as leituras comuns de células não entram num monitor ou secção crítica, porque a concessão impede a mutação concorrente do livro de trabalho
A validação da libertação mantém cada vista inativa abaixo de 64 KiB de estado fixo, cem vistas inativas abaixo de 8 MiB, e a criação de vistas independente do tamanho do livro de trabalho, com um limite p95 de um milissegundo num modelo de um milhão de células
O conjunto de testes de desempenho também limita o efeito de uma vista inativa sobre análises de cursor existentes de thread única a cinco por cento e exige que oito vistas a analisar folhas independentes atinjam pelo menos cinco vezes o débito de vista única no anfitrião 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 o livro de trabalho concreto através da sua interface de proprietário antes de criar vistas
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;