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