Dokumentacja HotXLS

Interfejs API wyboru okienek arkusza

TXLSWorksheet i TXLSXWorksheet udostępniają te same metody uwzględniające okienka do odczytywania lub zastępowania zaznaczonych obszarów komórek i zakresów

Wspólne typy i metody

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;

Tekst obszaru używa odwołań A1 do komórki lub zakresu, a ActiveAreaIndex to indeks liczony od zera w zwróconej lub dostarczonej sekwencji obszarów

Sekwencja obszarów zachowuje kolejność źródłową i może zawierać nakładające się zakresy, ponieważ kolejność zaznaczania i nakładanie się są częścią stanu widoku arkusza

Własność migawki

GetSelectedAreas zwraca nową tablicę dynamiczną, której ciągi i długość należą do obiektu wywołującego, więc zmiana lub zwolnienie wyniku nie może zmienić arkusza

Gdy żądane okienko nie ma reprezentowanej grupy zaznaczenia, wynik jest pusty, a ActiveAreaIndex ma wartość -1

Odczytanie nieistniejącego okienka nigdy nie tworzy w skoroszycie okienka, obiektu zaznaczenia, komórki ani zakresu

Agregacja rekordów klasycznego XLS

Klasyczny XLS przechowuje niezależną logiczną grupę zaznaczenia dla każdego okienka i agreguje kolejne rekordy BIFF Selection o tym samym kodzie okienka w kolejności źródłowej

Aktywny wiersz, aktywna kolumna i ActiveAreaIndex są wspólne dla wszystkich rekordów w jednej grupie, a indeks adresuje pełną zagregowaną sekwencję obszarów, a nie pojedynczy rekord fizyczny

Zapisanie nietkniętej grupy zachowuje pierwotne treści jej rekordów, podczas gdy zmieniona grupa jest zapisywana w kolejnych blokach po co najwyżej 1369 obszarów z tym samym zagregowanym aktywnym indeksem w każdym bloku

Edycja jednego okienka pozostawia grupy innych okienek bez zmian, a kopie skoroszytu zachowują pełny stan zaznaczenia okienek

Edycje strukturalne

Wstawianie lub usuwanie całych wierszy i kolumn mapuje ponownie uporządkowane grupy zaznaczenia dla każdego reprezentowanego okienka w obu aparatach skoroszytu

Obszary, które przetrwały, zachowują swoją kolejność i tożsamość obszaru aktywnego; jeśli obszar aktywny zostanie usunięty, wybierany jest pierwszy przetrwały następnik, a gdy nie ma już następnika — ostatni przetrwały poprzednik

Jeśli usunięto wszystkie obszary, grupa staje się jedną komórką na granicy usunięcia, a aktywna komórka spoza wybranego przetrwałego obszaru przechodzi na lewą górną komórkę tego obszaru

Nieprawidłowe rekordy klasyczne

Uszkodzone, nieprzylegające ani sprzeczne klasyczne rekordy Selection pozostają nieprzejrzyste i nie są ujawniane przez typowany dostęp do obszarów

Rekord fizyczny odrzucony podczas walidacji rekordów zgłasza xlsDiagnosticSelectionRecordInvalid z kodem diagnostycznym 1304, podczas gdy sprzeczność dotycząca tylko agregacji zgłasza jedną diagnostykę grupy na końcu pliku arkusza (EOF); zapisywanie odtwarza bajt po bajcie treść każdego pierwotnego rekordu

Duże zaznaczenia

Analiza i normalizacja obszarów, ponowne mapowanie strukturalne i budowanie migawki używają konstruktorów jednoprzebiegowych albo geometrycznego wzrostu pojemności, więc duże grupy zaznaczenia pozostają liniowe w ujęciu amortyzowanym

Współrzędne przewijania okienek

TryGetWindowScroll zwraca pierwszą widoczną komórkę dla jednego logicznego okienka, a ScrollWindow ją zmienia; oba aparaty używają współrzędnych wierszy i kolumn arkusza liczonych od jedności

Górne okienka współdzielą wiersz całego okna, dolne okienka współdzielą wiersz dolnego okienka, lewe okienka współdzielą kolumnę całego okna, a prawe okienka współdzielą kolumnę prawego okienka

Nieistniejące okienko zwraca False bez tworzenia stanu widoku, a wyjścia zapytania są ustawiane na zero; nieprawidłowe współrzędne również zwracają False, zanim jakakolwiek oś ulegnie zmianie

Klasyczny XLS utrwala osie górną i lewą w Window2, a dolną i prawą w Pane, podczas gdy XLSX niezależnie zachowuje odpowiadające im wartości topLeftCell w sheetView i pane

Aktualizacje niepodzielne

SelectAreas waliduje każde odwołanie A1 i indeks aktywny przed uzyskaniem transakcji zapisu arkusza

Metoda zwraca False dla uszkodzonych lub pustych danych wejściowych, nieprawidłowego indeksu aktywnego albo okienka, które nie istnieje w bieżącej geometrii podziału lub zablokowania, pozostawiając poprzednie zaznaczenie bez zmian

Pomyślne wywołanie zwraca True i zachowuje istniejące obiekty zaznaczenia właściwe dla aparatu oraz starsze interfejsy API

Przykład dla 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);

Zgodność

Klasyczne przeciążenie SelectAreas(const Areas; ActiveAreaIndex) i przeciążenie XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) pozostają dostępne bez zmian

Klasyczne właściwości ScrollRow i ScrollColumn oraz elementy XLSX o indeksowaniu od zera SetPaneScroll, GetPaneScroll, ScrollRow i ScrollCol również pozostają dostępne bez zmian

Wspólna fasada jawnie konwertuje logiczne nazwy okienek, więc obiekty wywołujące nie zależą od numerycznych kodów okienek używanych przez którykolwiek z formatów plików