API for valg av ruter i regneark
TXLSWorksheet og TXLSXWorksheet eksponerer de samme rutebevisste metodene for å lese eller erstatte utvalgte celle- og celleintervallområder
Felles typer og 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ådetekst bruker A1-celle- eller områdereferanser, og ActiveAreaIndex er en nullbasert indeks inn i den returnerte eller oppgitte områdesekvensen
Områdesekvensen beholder kildeordenen og kan inneholde overlappende områder, fordi utvalgsorden og overlapping er en del av regnearkets visningstilstand
Eierskap til øyeblikksbildet
GetSelectedAreas returnerer en ny dynamisk matrise hvis strenger og lengde tilhører den som kaller, slik at endring eller frigjøring av resultatet ikke kan endre regnearket
Når den etterspurte ruten ikke har noen representert utvalgsgruppe, er resultatet tomt, og ActiveAreaIndex er -1
Lesing av en manglende rute oppretter aldri en rute, et utvalgsobjekt, en celle eller et område i arbeidsboken
Aggregering av Classic XLS-poster
Classic XLS beholder en uavhengig logisk utvalgsgruppe for hver rute og aggregerer påfølgende BIFF Selection-poster med samme rutekode i kildeorden
Den aktive raden, den aktive kolonnen og ActiveAreaIndex deles av hver post i én gruppe, og indeksen adresserer hele den aggregerte områdesekvensen og ikke én fysisk post
Lagring av en urørt gruppe bevarer de opprinnelige postlegemene, mens en redigert gruppe skrives i påfølgende blokker på høyst 1369 områder med samme aggregerte aktive indeks i hver blokk
Redigering av én rute lar de andre rutenes grupper være uendret, og regnearkskopier beholder hele rutens utvalgstilstand
Strukturelle endringer
Innsettinger eller slettinger av hele rader og kolonner omformer de ordnede utvalgsgruppene for hver representerte rute i begge arbeidsbokmotorene
Områder som overlever, beholder rekkefølgen og det aktive områdets identitet; hvis det aktive området fjernes, velges den første overlevende etterfølgeren, fulgt av den siste overlevende forgjengeren når ingen etterfølger gjenstår
Hvis hvert område fjernes, blir gruppen én celle ved slettegrensen, mens en aktiv celle utenfor det valgte overlevende området faller tilbake til områdets øverste venstre celle
Ugyldige klassiske poster
Feilformede, usammenhengende eller motsigelsesfulle Classic Selection-poster forblir ugjennomsiktige og eksponeres ikke gjennom den typede områdeforespørselen
En fysisk post som avslås under postvalidering, rapporterer xlsDiagnosticSelectionRecordInvalid med diagnostikkoden 1304, mens en motsigelse bare i aggregeringen rapporterer én gruppediagnostikk ved regnearkets EOF; lagring spiller av hvert opprinnelige postlegeme byte for byte
Store utvalg
Områdeanalyse og -normalisering, strukturell omforming og øyeblikksbildekonstruksjon bruker engangsbyggere eller geometrisk kapasitetsvekst, slik at store utvalgsgrupper forblir amortisert lineære
Rute-rullekoordinater
TryGetWindowScroll returnerer den første synlige cellen for én logisk rute, og ScrollWindow endrer den, med énbaserte regnearkrad- og kolonnekoordinater i begge motorene
Øvre ruter deler hele vinduets rad, nedre ruter deler nedre ruterad, venstre ruter deler hele vinduets kolonne, og høyre ruter deler høyre ruterkolonne
En manglende rute returnerer False uten å opprette visningstilstand, med spørringsutdata satt til null; ugyldige koordinater returnerer også False før noen akse endres
Classic XLS lagrer den øvre og venstre aksen i Window2 og den nedre og høyre aksen i Pane, mens XLSX beholder de tilsvarende sheetView- og pane-topLeftCell-verdiene uavhengig
Atomære oppdateringer
SelectAreas validerer hver A1-referanse og den aktive indeksen før regnearkets skrivetransaksjon hentes
Metoden returnerer False for feilformet eller tomt inndata, en ugyldig aktiv indeks eller en rute som ikke finnes i gjeldende delings- eller innfrysingsgeometri, med det tidligere utvalget uendret
Et vellykket kall returnerer True og bevarer de eksisterende motorspesifikke utvalgsobjektene og de eldre API-ene
Delphi-eksempel
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 klassiske SelectAreas(const Areas; ActiveAreaIndex)-overbelastningen og XLSX-overbelastningen SelectAreas(const Areas; ActiveAreaIndex; APane) forblir tilgjengelige uendret
De klassiske ScrollRow- og ScrollColumn-egenskapene og XLSX-ens nullbaserte SetPaneScroll-, GetPaneScroll-, ScrollRow- og ScrollCol-medlemmer forblir også tilgjengelige uendret
Den felles fasaden konverterer eksplisitt logiske rutenavn, slik at de som kaller, ikke avhenger av de numeriske rutkodene som brukes av noe filformat