Docs HotXLS

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