HotXLS-Dokumentation

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