Documentação do HotXLS

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

CampoSignificado
SheetIndex / SheetNameIdentidade da planilha no escopo da visão
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 do cache de fórmula sem recálculo
HasFormulaCache / FormulaCachePresenç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
FormulaEvaluationA 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
FormulaVazia 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;

Veja também