HotXLS-dokumentation

API för rutval i kalkylblad

TXLSWorksheet och TXLSXWorksheet exponerar samma rutmedvetna metoder för att läsa eller ersätta markerade cell- och intervallområden

Gemensamma typer och metoder

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;

Områdestext använder A1-cell- eller intervallreferenser, och ActiveAreaIndex är ett nollbaserat index i den returnerade eller tillhandahållna områdessekvensen

Områdessekvensen bevarar källordningen och kan innehålla överlappande intervall, eftersom markeringsordning och överlapp är en del av kalkylbladets visningstillstånd

Ägarskap av ögonblicksbilden

GetSelectedAreas returnerar en ny dynamisk matris vars strängar och längd tillhör anroparen, så att ändring eller frigöring av resultatet inte kan ändra kalkylbladet

När den begärda rutan inte har någon representerad markeringsgrupp är resultatet tomt och ActiveAreaIndex är -1

Att läsa en saknad ruta skapar aldrig en ruta, ett markeringsobjekt, en cell eller ett intervall i arbetsboken

Aggregering av Classic XLS-poster

Classic XLS håller en oberoende logisk markeringsgrupp för varje ruta och aggregerar på varandra följande BIFF Selection-poster med samma rutkod i källordning

Den aktiva raden, den aktiva kolumnen och ActiveAreaIndex delas av varje post i en grupp, och indexet adresserar den fullständiga aggregerade områdessekvensen i stället för en fysisk post

Sparande av en orörd grupp bevarar dess ursprungliga postkroppar, medan en redigerad grupp skrivs i på varandra följande block på högst 1369 områden med samma aggregerade aktiva index i varje block

Redigering av en ruta lämnar de andra rutornas grupper oförändrade, och kalkylbladskopior bevarar det fullständiga rutvalets tillstånd

Strukturella ändringar

Insättningar eller borttagningar av hela rader och kolumner mappar om de ordnade markeringsgrupperna för varje representerad ruta i båda arbetsboksmotorerna

Överlevande områden behåller sin ordning och det aktiva områdets identitet; om det aktiva området tas bort väljs den första överlevande efterföljaren, följt av den sista överlevande föregångaren när ingen efterföljare återstår

Om varje område tas bort blir gruppen en cell vid borttagningsgränsen, medan en aktiv cell utanför det valda överlevande området faller tillbaka till områdets övre vänstra cell

Ogiltiga klassiska poster

Felformade, icke-sammanhängande eller motsägelsefulla Classic Selection-poster förblir opaka och exponeras inte via den typade områdesfrågan

En fysisk post som avvisas under postvalidering rapporterar xlsDiagnosticSelectionRecordInvalid med diagnostikkoden 1304, medan en motsägelse endast i aggregeringen rapporterar en gruppdiagnostik vid kalkylbladets EOF; sparandet spelar upp varje ursprunglig postkropp byte för byte

Stora markeringar

Områdesanalys och normalisering, strukturell omkartläggning och ögonblicksbildskonstruktion använder engångsbyggare eller geometrisk kapacitetstillväxt så att stora markeringsgrupper förblir amortiserat linjära

Rutans rullningskoordinater

TryGetWindowScroll returnerar den första synliga cellen för en logisk ruta och ScrollWindow ändrar den, med ettabaserade kalkylbladsrad- och kolumnkoordinater i båda motorerna

Övre rutor delar hela fönstrets rad, nedre rutor delar den nedre ruttens rad, vänstra rutor delar hela fönstrets kolumn och högra rutor delar högra ruttens kolumn

En saknad ruta returnerar False utan att skapa visningstillstånd, med frågeutdata satta till noll; ogiltiga koordinater returnerar också False innan någon axel ändras

Classic XLS bevarar den övre och vänstra axeln i Window2 och den nedre och högra axeln i Pane, medan XLSX behåller motsvarande sheetView- och pane-topLeftCell-värden oberoende

Atomära uppdateringar

SelectAreas validerar varje A1-referens och det aktiva indexet innan kalkylbladets skrivtransaktion erhålls

Metoden returnerar False för felformad eller tom inmatning, ett ogiltigt aktivt index eller en ruta som inte finns i den aktuella uppdelnings- eller frysgeometrin, med den tidigare markeringen oförändrad

Ett lyckat anrop returnerar True och bevarar de befintliga motorspecifika markeringsobjekten och de äldre API:erna

Delphi-exempel

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);

Kompatibilitet

Den klassiska SelectAreas(const Areas; ActiveAreaIndex)-överlagringen och XLSX-överlagringen SelectAreas(const Areas; ActiveAreaIndex; APane) förblir tillgängliga oförändrade

De klassiska egenskaperna ScrollRow och ScrollColumn och XLSX:ens nollbaserade medlemmar SetPaneScroll, GetPaneScroll, ScrollRow och ScrollCol förblir också tillgängliga oförändrade

Den gemensamma fasaden konverterar uttryckligen logiska rutnamn, så att anropare inte beror av de numeriska rutkoder som något av filformaten använder