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