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