API de sélection par volet dans les feuilles de calcul
TXLSWorksheet et TXLSXWorksheet exposent les mêmes méthodes conscientes des volets pour lire ou remplacer les zones de cellules et de plages sélectionnées
Types et méthodes partagés
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;
Le texte de zone utilise des références de cellule ou de plage A1, et ActiveAreaIndex est un index à base zéro dans la séquence de zones renvoyée ou fournie
La séquence de zones conserve l'ordre source et peut contenir des plages qui se chevauchent, car l'ordre de sélection et le chevauchement font partie de l'état de vue de la feuille de calcul
Propriété de l'instantané
GetSelectedAreas renvoie un nouveau tableau dynamique dont les chaînes et la longueur appartiennent à l'appelant, si bien que modifier ou libérer le résultat ne peut pas altérer la feuille de calcul
Lorsque le volet demandé n'a aucun groupe de sélection représenté, le résultat est vide et ActiveAreaIndex vaut -1
La lecture d'un volet absent ne crée jamais de volet, d'objet de sélection, de cellule ni de plage dans le classeur
Agrégation d'enregistrements XLS classiques
Le XLS classique conserve un groupe de sélection logique indépendant pour chaque volet et agrège les enregistrements BIFF Selection consécutifs portant le même code de volet, dans l'ordre source
La ligne active, la colonne active et ActiveAreaIndex sont partagés par chaque enregistrement d'un même groupe, et l'index adresse la séquence de zones agrégée complète plutôt qu'un seul enregistrement physique
L'enregistrement d'un groupe intact préserve ses corps d'enregistrements d'origine, tandis qu'un groupe modifié est écrit en blocs consécutifs de 1369 zones au plus, avec le même index actif agrégé dans chaque bloc
La modification d'un volet laisse les groupes des autres volets inchangés, et les copies de classeur conservent l'état de sélection par volet complet
Modifications structurelles
Les insertions ou suppressions de lignes et de colonnes entières remappent les groupes de sélection ordonnés pour chaque volet représenté dans les deux moteurs de classeur
Les zones survivantes conservent leur ordre et l'identité de la zone active ; si la zone active est supprimée, le premier successeur survivant est sélectionné, suivi du dernier prédécesseur survivant lorsqu'aucun successeur ne subsiste
Si toutes les zones sont supprimées, le groupe devient une seule cellule à la limite de suppression, tandis qu'une cellule active en dehors de la zone survivante choisie retombe sur la cellule supérieure gauche de cette zone
Enregistrements classiques invalides
Les enregistrements Selection classiques malformés, non contigus ou contradictoires restent opaques et ne sont pas exposés via la requête typée de zones
Un enregistrement physique rejeté lors de la validation des enregistrements signale xlsDiagnosticSelectionRecordInvalid avec le code de diagnostic 1304, tandis qu'une contradiction relevant uniquement de l'agrégation signale un diagnostic de groupe à l'EOF de la feuille de calcul ; l'enregistrement rejoue chaque corps d'enregistrement d'origine octet par octet
Grandes sélections
L'analyse des zones, la normalisation, le remappage structurel et la construction d'instantanés utilisent des générateurs en une seule passe ou une croissance géométrique de capacité, de sorte que les grands groupes de sélection restent amortis linéaires
Coordonnées de défilement par volet
TryGetWindowScroll renvoie la première cellule visible d'un volet logique et ScrollWindow la modifie, en utilisant des coordonnées de ligne et de colonne de feuille de calcul à base un dans les deux moteurs
Les volets supérieurs partagent la ligne de la fenêtre globale, les volets inférieurs partagent la ligne du volet inférieur, les volets gauches partagent la colonne de la fenêtre globale et les volets droits partagent la colonne du volet droit
Un volet absent renvoie False sans créer d'état de vue, les sorties de requête étant mises à zéro ; des coordonnées invalides renvoient également False avant qu'un axe ne soit modifié
Le XLS classique persiste les axes supérieur et gauche dans Window2 et les axes inférieur et droit dans Pane, tandis que le XLSX conserve indépendamment les valeurs topLeftCell correspondantes de sheetView et de pane
Mises à jour atomiques
SelectAreas valide chaque référence A1 et l'index actif avant d'obtenir la transaction d'écriture de la feuille de calcul
La méthode renvoie False pour une entrée malformée ou vide, un index actif invalide ou un volet qui n'existe pas dans la géométrie de fractionnement ou de blocage courante, la sélection précédente restant inchangée
Un appel réussi renvoie True et préserve les objets de sélection existants propres au moteur ainsi que les API héritées
Exemple 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é
La surcharge classique SelectAreas(const Areas; ActiveAreaIndex) et la surcharge XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) restent disponibles à l'identique
Les propriétés classiques ScrollRow et ScrollColumn ainsi que les membres XLSX à base zéro SetPaneScroll, GetPaneScroll, ScrollRow et ScrollCol restent également disponibles à l'identique
La façade partagée convertit explicitement les noms de volets logiques, de sorte que les appelants ne dépendent pas des codes de volets numériques utilisés par l'un ou l'autre format de fichier