Rozhranie API na výber panelov hárku
TXLSWorksheet a TXLSXWorksheet sprístupňujú rovnaké metódy pracujúce s panelmi na čítanie či nahradenie vybraných oblastí buniek a oblastí
Spoločné typy a metódy
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žíva odkazy A1 na bunku či oblasť a ActiveAreaIndex je index od nuly vo vrátenej či dodanej sekvencii oblastí
Sekvencia oblastí zachováva poradie zdroja a môže obsahovať prekrývajúce sa oblasti, pretože poradie výberu a prekrytie sú súčasťou stavu zobrazenia hárku
Vlastníctvo snímky
GetSelectedAreas vráti nové dynamické pole, ktorých reťazce a dĺžka patria volajúcemu, takže zmena či uvoľnenie výsledku nemôže hárok zmeniť
Ak požadovaný panel nemá žiadnu reprezentovanú skupinu výberu, výsledok je prázdny a ActiveAreaIndex má hodnotu -1
Čítanie chýbajúceho panela nikdy nevytvorí v zošite panel, objekt výberu, bunku ani oblasť
Agregácia záznamov klasického XLS
Klasický XLS udržiava pre každý panel nezávislú logickú skupinu výberu a agreguje po sebe nasledujúce záznamy BIFF Selection s rovnakým kódom panela v poradí zdroja
Aktívny riadok, aktívny stĺpec a ActiveAreaIndex sú zdieľané všetkými záznamami jednej skupiny a index adresuje kompletnú agregovanú sekvenciu oblastí, nie jediný fyzický záznam
Uloženie nedotknutej skupiny zachováva pôvodné telá jej záznamov, zatiaľ čo upravená skupina sa zapisuje v po sebe nasledujúcich blokoch po najviac 1369 oblastiach s rovnakým agregovaným aktívnym indexom v každom bloku
Úprava jedného panela ponechá skupiny ostatných panelov bez zmeny a kópie zošita zachovávajú úplný stav výberu podľa panelov
Štruktúrne úpravy
Vloženie či odstránenie celých riadkov a stĺpcov premmapuje usporiadané skupiny výberu pre každý reprezentovaný panel v oboch strojoch zošita
Oblasti, ktoré prežili, si zachovávajú poradie a identitu aktívnej oblasti; ak sa aktívna oblasť odstráni, vyberie sa prvý preživší nasledovník a ak sa žiadny nasledovník nezachová, posledný preživší predchodca
Ak sa odstránia všetky oblasti, skupina sa stane jedinou bunkou na hranici odstránenia a aktívna bunka mimo zvolenej preživšej oblasti prepadne na ľavú hornú bunku tejto oblasti
Neplatné klasické záznamy
Poškodené, nesúvislé alebo rozporné klasické záznamy Selection zostávajú nepriehľadné a nie sú vystavené cez typovaný dotaz oblastí
Fyzický záznam odmietnutý pri validácii záznamov hlási xlsDiagnosticSelectionRecordInvalid s diagnostickým kódom 1304, zatiaľ čo rozpor týkajúci sa len agregácie hlási jednu diagnostiku skupiny na konci súboru hárku (EOF); ukladanie prehrá každé pôvodné telo záznamu bajt po bajte
Rozsiahle výbery
Parsovanie a normalizácia oblastí, štruktúrne premapovanie a zostavenie snímky používajú jednopriechodové zostavovače či geometrický rast kapacity, takže veľké skupiny výberu zostávajú amortizovane lineárne
Súradnice posúvania panelov
TryGetWindowScroll vráti prvú viditeľnú bunku jedného logického panela a ScrollWindow ju zmení; obidva stroje používajú súradnice riadkov a stĺpcov hárku počítané od jednotky
Horné panely zdieľajú riadok celého okna, dolné panely zdieľajú riadok dolného panela, ľavé panely zdieľajú stĺpec celého okna a pravé panely zdieľajú stĺpec pravého panela
Chýbajúci panel vráti False bez vytvorenia stavu zobrazenia, pričom výstupy dotazu sa nastavia na nulu; neplatné súradnice tiež vrátia False skôr, než sa zmení ktorákoľvek os
Klasický XLS ukladá hornú a ľavú os v Window2 a dolnú a pravú os v Pane, zatiaľ čo XLSX si nezávisle uchováva zodpovedajúce hodnoty topLeftCell v sheetView a pane
Atómové aktualizácie
SelectAreas validuje každý odkaz A1 a aktívny index skôr, než získa transakciu zápisu hárku
Metóda vráti False pre poškodený či prázdny vstup, neplatný aktívny index alebo panel, ktorý v aktuálnej geometrii rozdelenia či zamrznutia neexistuje, pričom predchádzajúci výber zostane bez zmeny
Úspešné volanie vráti True a zachová existujúce objekty výberu závislé od stroja a staršie rozhrania API
Príklad pre 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é preťaženie SelectAreas(const Areas; ActiveAreaIndex) a preťaženie XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) zostávajú k dispozícii bez zmeny
Klasické vlastnosti ScrollRow a ScrollColumn a členy XLSX s indexovaním od nuly SetPaneScroll, GetPaneScroll, ScrollRow a ScrollCol tiež zostávajú k dispozícii bez zmeny
Zdieľaná fasáda explicitne prevádza logické názvy panelov, takže volajúci nezávisia od číselných kódov panelov používaných ktorýmkoľvek z formátov súborov