Rozhraní API pro výběr podoken listu
TXLSWorksheet a TXLSXWorksheet zpřístupňují stejné metody pracující s podokny pro čtení či nahrazení vybraných oblastí buněk a oblastí
Společné typy a 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;
Text oblasti používá odkazy A1 na buňku či oblast a ActiveAreaIndex je index od nuly ve vrácené či dodané sekvenci oblastí
Sekvence oblastí zachovává pořadí zdroje a může obsahovat překrývající se oblasti, protože pořadí výběru a překryv jsou součástí stavu zobrazení listu
Vlastnictví snímku
GetSelectedAreas vrací nové dynamické pole, jehož řetězce a délka patří volajícímu, takže změna či uvolnění výsledku nemohou list změnit
Pokud požadované podokno nemá žádnou reprezentovanou skupinu výběru, je výsledek prázdný a ActiveAreaIndex má hodnotu -1
Čtení chybějícího podokna nikdy nevytvoří v sešitu podokno, objekt výběru, buňku ani oblast
Agregace záznamů klasického XLS
Klasický XLS udržuje pro každé podokno nezávislou logickou skupinu výběru a agreguje po sobě jdoucí záznamy BIFF Selection se stejným kódem podokna v pořadí zdroje
Aktivní řádek, aktivní sloupec a ActiveAreaIndex jsou sdíleny všemi záznamy jedné skupiny a index adresuje kompletní agregovanou sekvenci oblastí, nikoli jediný fyzický záznam
Uložení nedotčené skupiny zachovává původní těla jejích záznamů, zatímco upravená skupina se zapisuje v po sobě jdoucích blocích o nejvýše 1369 oblastech se stejným agregovaným aktivním indexem v každém bloku
Úprava jednoho podokna ponechá skupiny ostatních podoken beze změny a kopie sešitu zachovávají úplný stav výběru podle podoken
Strukturové úpravy
Vložení či odstranění celých řádků a sloupců přemapuje uspořádané skupiny výběru pro každé reprezentované podokno v obou strojích sešitu
Přeživší oblasti si zachovávají pořadí a identitu aktivní oblasti; pokud je aktivní oblast odstraněna, vybere se první přeživší následník a když žádný následník nezůstane, poslední přeživší předchůdce
Pokud jsou odstraněny všechny oblasti, stane se ze skupiny jedna buňka na hranici odstranění a aktivní buňka mimo zvolenou přeživší oblast spadne na levou horní buňku této oblasti
Neplatné klasické záznamy
Poškozené, nesouvislé nebo rozporné klasické záznamy Selection zůstávají neprůhledné a nejsou vystaveny přes typovaný dotaz oblastí
Fyzický záznam odmítnutý při validaci záznamů hlásí xlsDiagnosticSelectionRecordInvalid s diagnostickým kódem 1304, zatímco rozpor týkající se jen agregace hlásí jednu diagnostiku skupiny na konci souboru listu (EOF); ukládání přehraje každé původní tělo záznamu bajt po bajtu
Rozsáhlé výběry
Parsování a normalizace oblastí, strukturové přemapování a sestavení snímku používají jednoprůchodové sestavovače či geometrický růst kapacity, takže velké skupiny výběru zůstávají amortizovaně lineární
Souřadnice posouvání podoken
TryGetWindowScroll vrací první viditelnou buňku jednoho logického podokna a ScrollWindow ji mění; oba stroje používají souřadnice řádků a sloupců listu počítané od jedničky
Horní podokna sdílejí řádek celého okna, dolní podokna sdílejí řádek dolního podokna, levá podokna sdílejí sloupec celého okna a pravá podokna sdílejí sloupec pravého podokna
Chybějící podokno vrátí False bez vytvoření stavu zobrazení, přičemž výstupy dotazu jsou nastaveny na nulu; neplatné souřadnice rovněž vrátí False dříve, než se změní kterákoli osa
Klasický XLS ukládá horní a levou osu v Window2 a dolní a pravou osu v Pane, zatímco XLSX si nezávisle uchovává odpovídající hodnoty topLeftCell v sheetView a pane
Atomické aktualizace
SelectAreas validuje každý odkaz A1 a aktivní index dříve, než získá transakci zápisu listu
Metoda vrací False pro poškozený či prázdný vstup, neplatný aktivní index nebo podokno, které v aktuální geometrii rozdělení či zamrznutí neexistuje, přičemž předchozí výběr zůstane beze změny
Úspěšné volání vrátí True a zachová stávající objekty výběru závislé na stroji a starší rozhraní API
Příklad pro 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);
Kompatibilita
Klasické přetížení SelectAreas(const Areas; ActiveAreaIndex) a přetížení XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) zůstávají k dispozici beze změny
Klasické vlastnosti ScrollRow a ScrollColumn a členy XLSX s indexováním od nuly SetPaneScroll, GetPaneScroll, ScrollRow a ScrollCol rovněž zůstávají k dispozici beze změny
Sdílená fasáda explicitně převádí logické názvy podoken, takže volající nezávisí na číselných kódech podoken používaných kterýmkoli z formátů souborů