Dokumentace HotXLS

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ů