Documentación HotXLS

API de selección en paneles de hoja de cálculo

TXLSWorksheet y TXLSXWorksheet exponen los mismos métodos conscientes de los paneles para leer o reemplazar las áreas seleccionadas de celdas y rangos

Tipos y métodos compartidos

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;

El texto de las áreas usa referencias A1 de celda o de rango, y ActiveAreaIndex es un índice de base cero en la secuencia de áreas devuelta o suministrada

La secuencia de áreas conserva el orden de origen y puede contener rangos superpuestos, porque el orden de selección y la superposición forman parte del estado de vista de la hoja de cálculo

Propiedad de la instantánea

GetSelectedAreas devuelve un arreglo dinámico nuevo cuyas cadenas y cuya longitud pertenecen al llamador, de modo que modificar o liberar el resultado no puede alterar la hoja de cálculo

Cuando el panel solicitado no tiene ningún grupo de selección representado, el resultado está vacío y ActiveAreaIndex es -1

Leer un panel inexistente nunca crea un panel, un objeto de selección, una celda ni un rango en el libro de trabajo

Agregación de registros de XLS clásico

XLS clásico mantiene un grupo de selección lógico independiente para cada panel y agrega los registros Selection de BIFF consecutivos con el mismo código de panel en orden de origen

La fila activa, la columna activa y ActiveAreaIndex son compartidos por todos los registros de un grupo, y el índice direcciona la secuencia agregada completa de áreas en lugar de un único registro físico

Guardar un grupo intacto preserva los cuerpos originales de sus registros, mientras que un grupo editado se escribe en bloques consecutivos de como máximo 1369 áreas con el mismo índice activo agregado en cada bloque

Editar un panel deja sin cambios los grupos de los demás paneles, y las copias del libro de trabajo conservan el estado completo de selección por paneles

Ediciones estructurales

Las inserciones o eliminaciones de filas o columnas completas reasignan los grupos de selección ordenados de cada panel representado en ambos motores del libro de trabajo

Las áreas que sobreviven conservan su orden y la identidad del área activa; si se elimina el área activa, se selecciona el primer sucesor superviviente, seguido del último predecesor superviviente cuando no queda ningún sucesor

Si se eliminan todas las áreas, el grupo pasa a ser una sola celda en el límite de la eliminación, mientras que una celda activa fuera del área superviviente elegida recurre a la celda superior izquierda de esa área

Registros clásicos no válidos

Los registros Selection clásicos malformados, no contiguos o contradictorios permanecen opacos y no se exponen a través de la consulta con tipos de áreas

Un registro físico rechazado durante la validación de registros notifica xlsDiagnosticSelectionRecordInvalid con el código de diagnóstico 1304, mientras que una contradicción relativa solo a la agregación notifica un diagnóstico de grupo al EOF de la hoja de cálculo; al guardar se reproducen byte a byte los cuerpos de todos los registros originales

Selecciones grandes

El análisis y la normalización de áreas, la reasignación estructural y la construcción de instantáneas usan generadores de una sola pasada o crecimiento geométrico de capacidad, de modo que los grupos de selección grandes siguen siendo lineales amortizados

Coordenadas de desplazamiento por panel

TryGetWindowScroll devuelve la primera celda visible de un panel lógico y ScrollWindow la cambia, usando coordenadas de fila y columna de la hoja de cálculo con base uno en ambos motores

Los paneles superiores comparten la fila de la ventana global, los inferiores comparten la fila del panel inferior, los paneles izquierdos comparten la columna de la ventana global y los derechos comparten la columna del panel derecho

Un panel inexistente devuelve False sin crear estado de vista, con los resultados de la consulta establecidos en cero; las coordenadas no válidas también devuelven False antes de cambiar cualquier eje

XLS clásico persiste los ejes superior e izquierdo en Window2 y los ejes inferior y derecho en Pane, mientras que XLSX conserva de forma independiente los valores topLeftCell correspondientes de sheetView y pane

Actualizaciones atómicas

SelectAreas valida cada referencia A1 y el índice activo antes de obtener la transacción de escritura de la hoja de cálculo

El método devuelve False para una entrada malformada o vacía, un índice activo no válido o un panel que no existe en la geometría actual de división o inmovilización, dejando la selección anterior sin cambios

Una llamada correcta devuelve True y preserva los objetos de selección existentes propios del motor y las API heredadas

Ejemplo de 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);

Compatibilidad

La sobrecarga clásica SelectAreas(const Areas; ActiveAreaIndex) y la sobrecarga de XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) siguen disponibles sin cambios

Las propiedades clásicas ScrollRow y ScrollColumn y los miembros de XLSX con base cero SetPaneScroll, GetPaneScroll, ScrollRow y ScrollCol también siguen disponibles sin cambios

La fachada compartida convierte explícitamente los nombres lógicos de los paneles, de modo que los llamadores no dependen de los códigos numéricos de panel que use cualquiera de los dos formatos de archivo