Dokumentácia HotXLS

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