Documentazione HotXLS

API di selezione nei riquadri del foglio di lavoro

TXLSWorksheet e TXLSXWorksheet espongono gli stessi metodi consapevoli dei riquadri per leggere o sostituire le aree di celle e intervalli selezionate

Tipi e metodi condivisi

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;

Il testo delle aree usa riferimenti A1 a celle o intervalli, e ActiveAreaIndex è un indice a base zero nella sequenza di aree restituita o fornita

La sequenza di aree conserva l'ordine di origine e può contenere intervalli sovrapposti, perché l'ordine di selezione e la sovrapposizione fanno parte dello stato di vista del foglio di lavoro

Proprietà dell'istantanea

GetSelectedAreas restituisce un nuovo array dinamico le cui stringhe e la cui lunghezza appartengono al chiamante, così che modificare o rilasciare il risultato non può alterare il foglio di lavoro

Quando il riquadro richiesto non ha un gruppo di selezione rappresentato, il risultato è vuoto e ActiveAreaIndex è -1

Leggere un riquadro assente non crea mai un riquadro, un oggetto di selezione, una cella o un intervallo nel workbook

Aggregazione dei record di XLS classico

XLS classico mantiene un gruppo di selezione logico indipendente per ogni riquadro e aggrega i record BIFF Selection consecutivi con lo stesso codice di riquadro nell'ordine di origine

La riga attiva, la colonna attiva e ActiveAreaIndex sono condivisi da ogni record di un gruppo, e l'indice indirizza la sequenza completa di aree aggregate anziché un singolo record fisico

Il salvataggio di un gruppo intatto ne preserva i corpi di record originali, mentre un gruppo modificato viene scritto in blocchi consecutivi di al massimo 1369 aree con lo stesso indice attivo aggregato in ogni blocco

La modifica di un riquadro lascia invariati i gruppi degli altri riquadri e le copie del workbook conservano lo stato completo di selezione per riquadro

Modifiche strutturali

Gli inserimenti o le eliminazioni di intere righe o colonne rieseguono il mapping delle sequenze ordinate di gruppi di selezione per ogni riquadro rappresentato in entrambi i motori del workbook

Le aree superstiti conservano il loro ordine e l'identità dell'area attiva; se l'area attiva viene rimossa, viene selezionato il primo successivo superstite, seguito dall'ultimo precedente superstite quando nessun successivo rimane

Se ogni area viene rimossa, il gruppo diventa una singola cella al confine dell'eliminazione, mentre una cella attiva fuori dall'area superstite scelta ricade sulla cella in alto a sinistra di quell'area

Record classici non validi

I record Selection classici malformati, non contigui o contraddittori restano opachi e non vengono esposti attraverso la query tipizzata delle aree

Un record fisico rifiutato durante la validazione dei record segnala xlsDiagnosticSelectionRecordInvalid con codice diagnostico 1304, mentre una contraddizione relativa solo all'aggregazione segnala una diagnostica di gruppo all'EOF del foglio di lavoro; il salvataggio riproduce ogni corpo di record originale byte per byte

Selezioni di grandi dimensioni

Analisi e normalizzazione delle aree, rimappatura strutturale e costruzione dell'istantanea usano builder a passaggio singolo o crescita geometrica della capacità, così che i grandi gruppi di selezione restano ammortizzati lineari

Coordinate di scorrimento dei riquadri

TryGetWindowScroll restituisce la prima cella visibile di un riquadro logico e ScrollWindow la modifica, usando coordinate di riga e colonna del foglio di lavoro a base uno in entrambi i motori

I riquadri superiori condividono la riga della finestra complessiva, i riquadri inferiori condividono la riga del riquadro inferiore, i riquadri sinistri condividono la colonna della finestra complessiva e i riquadri destri condividono la colonna del riquadro destro

Un riquadro assente restituisce False senza creare stato di vista, con gli output della query impostati su zero; anche coordinate non valide restituiscono False prima che un asse venga modificato

XLS classico rende persistenti gli assi superiore e sinistro in Window2 e gli assi inferiore e destro in Pane, mentre XLSX conserva in modo indipendente i corrispondenti valori topLeftCell di sheetView e pane

Aggiornamenti atomici

SelectAreas valida ogni riferimento A1 e l'indice attivo prima di ottenere la transazione di scrittura del foglio di lavoro

Il metodo restituisce False per input malformato o vuoto, un indice attivo non valido o un riquadro inesistente nella geometria corrente di divisione o blocco, lasciando la selezione precedente invariata

Una chiamata riuscita restituisce True e preserva gli oggetti di selezione esistenti specifici del motore e le API legacy

Esempio 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);

Compatibilità

L'overload classico SelectAreas(const Areas; ActiveAreaIndex) e l'overload XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) restano disponibili invariati

Le proprietà classiche ScrollRow e ScrollColumn e i membri XLSX a base zero SetPaneScroll, GetPaneScroll, ScrollRow e ScrollCol restano anch'essi disponibili invariati

La facciata condivisa converte esplicitamente i nomi logici dei riquadri, così che i chiamanti non dipendono dai codici numerici dei riquadri usati da uno dei due formati di file