Documentação do HotXLS

API de seleção em painéis de planilha

TXLSWorksheet e TXLSXWorksheet expõem os mesmos métodos conscientes de painéis para ler ou substituir as áreas selecionadas de células e intervalos

Tipos e métodos compartilhados

TXLSPanePosition = (xlspTopLeft, xlspTopRight,
  xlspBottomLeft, xlspBottomRight);
TXLSSelectedAreas = array of WideString;

function GetSelectedAreas(APane: TXLSPanePosition;
  out ActiveAreaIndex: Integer): TXLSSelectedAreas;
function SelectAreas(APane: TXLSPanePosition;
  const Areas: array of WideString;
  ActiveAreaIndex: Integer = 0): Boolean;
function TryGetWindowScroll(APane: TXLSPanePosition;
  out ARow, ACol: Integer): Boolean;
function ScrollWindow(APane: TXLSPanePosition;
  ARow, ACol: Integer): Boolean;

O texto das áreas usa referências A1 de célula ou intervalo, e ActiveAreaIndex é um índice de base zero na sequência de áreas retornada ou fornecida

A sequência de áreas mantém a ordem de origem e pode conter intervalos sobrepostos, porque a ordem de seleção e a sobreposição fazem parte do estado de exibição da planilha

Propriedade do instantâneo

GetSelectedAreas retorna uma nova matriz dinâmica cujas cadeias de caracteres e cujo comprimento pertencem ao chamador, de modo que alterar ou liberar o resultado não pode modificar a planilha

Quando o painel solicitado não tem nenhum grupo de seleção representado, o resultado é vazio e ActiveAreaIndex é -1

Ler um painel inexistente nunca cria um painel, um objeto de seleção, uma célula ou um intervalo na pasta de trabalho

Agregação de registros do XLS clássico

O XLS clássico mantém um grupo de seleção lógico independente para cada painel e agrega registros BIFF Selection consecutivos com o mesmo código de painel na ordem de origem

A linha ativa, a coluna ativa e o ActiveAreaIndex são compartilhados por todos os registros de um grupo, e o índice endereça a sequência completa de áreas agregadas em vez de um único registro físico

Salvar um grupo intocado preserva os corpos originais de seus registros, enquanto um grupo editado é gravado em blocos consecutivos de no máximo 1369 áreas com o mesmo índice ativo agregado em cada bloco

Editar um painel deixa os grupos dos outros painéis inalterados, e as cópias da pasta de trabalho retêm o estado completo de seleção por painel

Edições estruturais

Inserções ou exclusões de linhas ou colunas inteiras remapeiam os grupos de seleção ordenados de cada painel representado em ambos os motores da pasta de trabalho

As áreas que sobrevivem mantêm sua ordem e a identidade da área ativa; se a área ativa é removida, o primeiro sucessor sobrevivente é selecionado, seguido do último predecessor sobrevivente quando nenhum sucessor permanece

Se todas as áreas forem removidas, o grupo se torna uma única célula no limite da exclusão, enquanto uma célula ativa fora da área sobrevivente escolhida retorna à célula superior esquerda dessa área

Registros clássicos inválidos

Registros BIFF Selection clássicos malformados, não contíguos ou contraditórios permanecem opacos e não são expostos por meio da consulta tipada de áreas

Um registro físico rejeitado durante a validação de registros relata xlsDiagnosticSelectionRecordInvalid com o código de diagnóstico 1304, enquanto uma contradição apenas da agregação relata um diagnóstico de grupo no EOF da planilha; ao salvar, todos os corpos de registro originais são reproduzidos byte a byte

Seleções grandes

A análise e a normalização de áreas, o remapeamento estrutural e a construção do instantâneo usam construtores de passagem única ou crescimento geométrico de capacidade, de modo que grupos de seleção grandes permanecem linearmente amortizados

Coordenadas de rolagem por painel

TryGetWindowScroll retorna a primeira célula visível de um painel lógico e ScrollWindow a altera, usando coordenadas de linha e coluna da planilha com base um em ambos os motores

Os painéis superiores compartilham a linha da janela geral, os painéis inferiores compartilham a linha do painel inferior, os painéis esquerdos compartilham a coluna da janela geral e os painéis direitos compartilham a coluna do painel direito

Um painel inexistente retorna False sem criar estado de exibição, com as saídas da consulta definidas como zero; coordenadas inválidas também retornam False antes que qualquer eixo seja alterado

O XLS clássico persiste os eixos superior e esquerdo em Window2 e os eixos inferior e direito em Pane, enquanto o XLSX retém de forma independente os valores topLeftCell correspondentes de sheetView e pane

Atualizações atômicas

SelectAreas valida cada referência A1 e o índice ativo antes de obter a transação de gravação da planilha

O método retorna False para entrada malformada ou vazia, um índice ativo inválido ou um painel que não existe na geometria atual de divisão ou congelamento, deixando a seleção anterior inalterada

Uma chamada bem-sucedida retorna True e preserva os objetos de seleção existentes específicos do motor e as APIs herdadas

Exemplo em Delphi

if Sheet.SelectAreas(xlspBottomRight,
  ['C4:E5', 'D5:F6', 'G7'], 1) then
begin
  Areas := Sheet.GetSelectedAreas(xlspBottomRight,
    ActiveAreaIndex);
  UseSelection(Areas, ActiveAreaIndex);
end;

if Sheet.ScrollWindow(xlspBottomRight, 20, 8) and
   Sheet.TryGetWindowScroll(xlspBottomRight, Row, Col) then
  ShowVisibleCell(Row, Col);

Compatibilidade

A sobrecarga clássica SelectAreas(const Areas; ActiveAreaIndex) e a sobrecarga XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) permanecem disponíveis sem alterações

As propriedades clássicas ScrollRow e ScrollColumn e os membros XLSX de base zero SetPaneScroll, GetPaneScroll, ScrollRow e ScrollCol também permanecem disponíveis sem alterações

A fachada compartilhada converte explicitamente os nomes lógicos de painéis, de modo que os chamadores não dependem dos códigos numéricos de painel usados por qualquer um dos formatos de arquivo