API odabira okvira radnog lista
TXLSWorksheet i TXLSXWorksheet izlažu iste metode svjesne okvira za čitanje ili zamjenu odabranih područja ćelija i raspona
Zajednički tipovi i metode
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 područja rabi reference ćelija ili raspona A1, a ActiveAreaIndex je indeks s bazom nula u vraćenom ili pruženom nizu područja
Niz područja zadržava izvorni redoslijed i može sadržavati preklapajuće raspone jer su redoslijed odabira i preklapanje dio stanja prikaza radnog lista
Vlasništvo nad snimkom
GetSelectedAreas vraća novo dinamičko polje čiji nizovi i duljina pripadaju pozivatelju, pa promjena ili otpuštanje rezultata ne može izmijeniti radni list
Kada zatraženi okvir nema nijednu prikazanu skupinu odabira, rezultat je prazan, a ActiveAreaIndex je -1
Čitanje nepostojećeg okvira nikada ne stvara okvir, objekt odabira, ćeliju ni raspon u radnoj knjizi
Agregacija zapisa klasičnog XLS-a
Klasični XLS čuva neovisnu logičku skupinu odabira za svaki okvir i agregira uzastopne BIFF zapise Selection istim kôdom okvira u redoslijedu izvora
Aktivni redak, aktivni stupac i ActiveAreaIndex dijele svi zapisi u jednoj skupini, a indeks adresira potpuni agregirani niz područja, a ne jedan fizički zapis
Spremanje nedirnute skupine čuva njezina izvorna tijela zapisa, dok se uređena skupina zapisuje u uzastopnim blokovima od najviše 1369 područja s istim agregiranim aktivnim indeksom u svakom bloku
Uređivanje jednog okvira ostavlja skupine ostalih okvira nepromijenjenima, a kopije radnog lista zadržavaju potpuno stanje odabira okvira
Strukturalne izmjene
Umetanja ili brisanja cijelih redaka i stupaca premapiraju poredane skupine odabira za svaki prikazani okvir u oba pogona radnih knjiga
Područja koja prežive zadržavaju svoj redoslijed i identitet aktivnog područja; ako se aktivno područje ukloni, bira se prvi preživjeli sljedbenik, a potom posljednji preživjeli prethodnik kad ne preostane nijedan sljedbenik
Ako se ukloni svako područje, skupina postaje jedna ćelija na granici brisanja, dok aktivna ćelija izvan odabranog preživjelog područja pada na gornju lijevu ćeliju tog područja
Nevažeći klasični zapisi
Deformirani, nesusjedni ili proturječni klasični zapisi Selection ostaju neprozirni i ne izlažu se kroz tipizirani upit područja
Fizički zapis odbijen tijekom provjere zapisa izvještava xlsDiagnosticSelectionRecordInvalid s dijagnostičkim kôdom 1304, dok proturječnost samo na razini agregacije izvještava jednu dijagnostiku skupine pri EOF-u radnog lista; spremanje ponavlja svako izvorno tijelo zapisa bajt po bajt
Veliki odabiri
Raščlamba i normalizacija područja, strukturno premapiranje i izgradnja snimka rabiju jednoiteracijske graditelje ili geometrijski rast kapaciteta pa velike skupine odabira ostaju amortizirano linearne
Koordinate klizanja okvira
TryGetWindowScroll vraća prvu vidljivu ćeliju za jedan logički okvir, a ScrollWindow je mijenja, rabeći koordinate retka i stupca radnog lista koje broje od jedan u oba pogona
Gornji okviri dijele redak cjelokupnog prozora, donji okviri dijele redak donjeg okvira, lijevi okviri dijele stupac cjelokupnog prozora, a desni okviri dijele stupac desnog okvira
Nepostojeći okvir vraća False bez stvaranja stanja prikaza, s izlazima upita postavljenima na nulu; nevažeće koordinate također vraćaju False prije nego što se ijedna os promijeni
Klasični XLS trajno pohranjuje gornju i lijevu os u Window2 te donju i desnu os u Pane, dok XLSX neovisno zadržava odgovarajuće vrijednosti topLeftCell od sheetView i pane
Atomarna ažuriranja
SelectAreas provjerava svaku referencu A1 i aktivni indeks prije nego što stekne transakciju zapisa radnog lista
Metoda vraća False za deformiran ili prazan unos, nevažeći aktivni indeks ili okvir koji ne postoji u trenutačnoj geometriji razdjeljivanja ili zamrzavanja, s prethodnim odabirom nepromijenjenim
Uspješan poziv vraća True i čuva postojeće objekte odabira specifične za pogon i zastarjele API-je
Primjer za 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);
Kompatibilnost
Klasično preopterećenje SelectAreas(const Areas; ActiveAreaIndex) i preopterećenje XLSX-a SelectAreas(const Areas; ActiveAreaIndex; APane) ostaju dostupni nepromijenjeni
Klasična svojstva ScrollRow i ScrollColumn te XLSX članovi s bazom nula SetPaneScroll, GetPaneScroll, ScrollRow i ScrollCol također ostaju dostupni nepromijenjeni
Zajednička fasada izričito pretvara logička imena okvira pa pozivatelji ne ovise o brojčanim kôdovima okvira koje rabi bilo koji format datoteke