Documentação do HotXLS

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

CampoSignificado
SheetIndex / SheetNameIdentidade da folha no âmbito da vista
Row / ColCoordenadas de célula com base um
StyleIndexÍndice XF clássico armazenado ou índice de formato de célula XLSX
KindClassificação texto, número, data-hora, Boolean, fórmula, erro ou em branco
ValueValor escalar armazenado ou valor da cache de fórmula sem recálculo
HasFormulaCache / FormulaCachePresença e proveniência da cache de fórmula, tipo de valor e valor em cache próprio
FormulaEvaluationSe 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
FormulaVazia 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;

Veja também