API für die Auswahl in Arbeitsblatt-Fensterbereichen
TXLSWorksheet und TXLSXWorksheet bieten dieselben fensterbereichsbezogenen Methoden, um ausgewählte Zell- und Bereichsflächen zu lesen oder zu ersetzen
Gemeinsame Typen und Methoden
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;
Bereichstext verwendet A1-Zell- oder Bereichsbezüge, und ActiveAreaIndex ist ein nullbasierter Index in die zurückgegebene oder übergebene Bereichsfolge
Die Bereichsfolge bewahrt die Quellreihenfolge und darf überlappende Bereiche enthalten, da Auswahlreihenfolge und Überlappung Teil des Ansichtszustands des Arbeitsblatts sind
Eigentum am Schnappschuss
GetSelectedAreas gibt ein neues dynamisches Array zurück, dessen Zeichenfolgen und Länge dem Aufrufer gehören, sodass das Ändern oder Freigeben des Ergebnisses das Arbeitsblatt nicht verändern kann
Wenn der angeforderte Fensterbereich keine dargestellte Auswahlgruppe hat, ist das Ergebnis leer und ActiveAreaIndex ist -1
Das Lesen eines fehlenden Fensterbereichs erzeugt niemals einen Fensterbereich, ein Auswahlobjekt, eine Zelle oder einen Bereich in der Arbeitsmappe
Datensatzaggregation von Classic XLS
Classic XLS führt für jeden Fensterbereich eine unabhängige logische Auswahlgruppe und aggregiert aufeinanderfolgende BIFF-Selection-Datensätze mit demselben Fensterbereichscode in Quellreihenfolge
Die aktive Zeile, die aktive Spalte und ActiveAreaIndex werden von jedem Datensatz einer Gruppe gemeinsam genutzt, und der Index adressiert die vollständige aggregierte Bereichsfolge und nicht einen einzelnen physischen Datensatz
Das Speichern einer unberührten Gruppe bewahrt ihre ursprünglichen Datensatzkörper, während eine bearbeitete Gruppe in aufeinanderfolgenden Blöcken von höchstens 1369 Bereichen mit demselben aggregierten aktiven Index in jedem Block geschrieben wird
Das Bearbeiten eines Fensterbereichs lässt die Gruppen der anderen Fensterbereiche unverändert, und Arbeitsmappenkopien bewahren den vollständigen Fensterbereichs-Auswahlzustand
Strukturelle Bearbeitungen
Ganze Zeilen und ganze Spalten betreffende Einfügungen oder Löschungen ordnen die geordneten Auswahlgruppen für jeden dargestellten Fensterbereich in beiden Arbeitsmappen-Engines neu
Überlebende Bereiche behalten ihre Reihenfolge und die Identität des aktiven Bereichs; wird der aktive Bereich entfernt, wird der erste überlebende Nachfolger ausgewählt, gefolgt vom letzten überlebenden Vorgänger, wenn kein Nachfolger bleibt
Wird jeder Bereich entfernt, wird die Gruppe zu einer einzelnen Zelle an der Löschgrenze, während eine aktive Zelle außerhalb des gewählten überlebenden Bereichs auf dessen linke obere Zelle zurückfällt
Ungültige klassische Datensätze
Fehlerhafte, nicht zusammenhängende oder widersprüchliche klassische Selection-Datensätze bleiben opak und werden über die typisierte Bereichsabfrage nicht offengelegt
Ein bei der Datensatzvalidierung abgelehnter physischer Datensatz meldet xlsDiagnosticSelectionRecordInvalid mit dem Diagnosecode 1304, während ein nur die Aggregation betreffender Widerspruch eine Gruppendiagnose am Arbeitsblatt-EOF meldet; das Speichern spielt jeden ursprünglichen Datensatzkörper bytefürbyte ab
Große Auswahlen
Bereichsparsing, Normalisierung, strukturelle Neuzuordnung und Schnappschusskonstruktion verwenden Durchlauf-Builder oder geometrisches Kapazitätswachstum, sodass große Auswahlgruppen amortisiert linear bleiben
Fensterbereichs-Scrollkoordinaten
TryGetWindowScroll gibt die erste sichtbare Zelle eines logischen Fensterbereichs zurück und ScrollWindow verändert sie, mit einsbasierten Arbeitsblattzeilen- und -spaltenkoordinaten in beiden Engines
Oberer Fensterbereiche teilen sich die Gesamtfensterzeile, unterer Fensterbereiche teilen sich die untere Bereichszeile, linke Fensterbereiche teilen sich die Gesamtfensterspalte und rechte Fensterbereiche teilen sich die rechte Bereichsspalte
Ein fehlender Fensterbereich gibt False zurück, ohne Ansichtszustand zu erzeugen, wobei die Abfrageausgaben auf null gesetzt werden; ungültige Koordinaten geben ebenfalls False zurück, bevor eine Achse verändert wird
Classic XLS speichert die oberen und linken Achsen in Window2 und die unteren und rechten Achsen in Pane, während XLSX die entsprechenden sheetView- und pane-topLeftCell-Werte unabhängig beibehält
Atomare Aktualisierungen
SelectAreas validiert jeden A1-Bezug und den aktiven Index, bevor die Schreibtransaktion des Arbeitsblatts erlangt wird
Die Methode gibt False für fehlerhafte oder leere Eingaben, einen ungültigen aktiven Index oder einen Fensterbereich zurück, der in der aktuellen Teilungs- oder Fixiergeometrie nicht existiert, wobei die vorherige Auswahl unverändert bleibt
Ein erfolgreicher Aufruf gibt True zurück und bewahrt die vorhandenen enginespezifischen Auswahlobjekte und Legacy-APIs
Delphi-Beispiel
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);
Kompatibilität
Die klassische Überladung SelectAreas(const Areas; ActiveAreaIndex) und die XLSX-Überladung SelectAreas(const Areas; ActiveAreaIndex; APane) bleiben unverändert verfügbar
Die klassischen Eigenschaften ScrollRow und ScrollColumn und die nullbasierten XLSX-Elemente SetPaneScroll, GetPaneScroll, ScrollRow und ScrollCol bleiben ebenfalls unverändert verfügbar
Die gemeinsame Fassade wandelt logische Fensterbereichsnamen explizit um, sodass Aufrufer nicht von den numerischen Fensterbereichscodes abhängen, die eines der Dateiformate verwendet