API til rudevalg i regneark
TXLSWorksheet og TXLSXWorksheet eksponerer de samme rudebevidste metoder til at læse eller erstatte valgte celle- og intervalområder
Fælles 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 bruger A1-celle- eller intervalreferencer, og ActiveAreaIndex er et nulbaseret indeks i den returnerede eller angivne områdesekvens
Områdesekvensen bevarer kilderækkefølgen og kan indeholde overlappende intervaller, fordi valgrækkefølge og overlap er en del af regnearkets visningstilstand
Snapshotets ejerskab
GetSelectedAreas returnerer et nyt dynamisk array, hvis strenge og længde tilhører kalderen, så ændring eller frigivelse af resultatet ikke kan ændre regnearket
Når den anmodede rude ikke har nogen repræsenteret valggruppe, er resultatet tomt, og ActiveAreaIndex er -1
Læsning af en manglende rude opretter aldrig en rude, et valgobjekt, en celle eller et interval i projektmappen
Aggregering af Classic XLS-poster
Classic XLS holder en uafhængig logisk valggruppe for hver rude og aggregerer hinanden følgende BIFF Selection-poster med samme ruderkode i kilderækkefølgen
Den aktive række, den aktive kolonne og ActiveAreaIndex deles af hver post i én gruppe, og indekset adresserer den komplette aggregerede områdesekvens og ikke én fysisk post
Lagring af en urørt gruppe bevarer dens oprindelige postlegemer, mens en redigeret gruppe skrives i hinanden følgende blokke på højst 1369 områder med samme aggregerede aktive indeks i hver blok
Redigering af én rude lader de andre ruders grupper være uændrede, og regnearkskopier bevarer den komplette rudevalgtilstand
Strukturelle redigeringer
Indsættelser eller sletninger af hele rækker og kolonner kortlægger de ordnede valggrupper om for hver repræsenteret rude i begge projektmappemotorer
Overlevende områder bevarer deres rækkefølge og det aktive områdes identitet; hvis det aktive område fjernes, vælges den første overlevende efterfølger, fulgt af den sidste overlevende forgænger, når ingen efterfølger er tilbage
Hvis alle områder fjernes, bliver gruppen til én celle ved sletningsgrænsen, mens en aktiv celle uden for det valgte overlevende område falder tilbage til det områdets øverste venstre celle
Ugyldige klassiske poster
Fejlformede, ikke-sammenhængende eller modstridende Classic Selection-poster forbliver uigennemsigtige og eksponeres ikke gennem den typede områdeforespørgsel
En fysisk post, der afvises under postvalidering, rapporterer xlsDiagnosticSelectionRecordInvalid med diagnostikkoden 1304, mens en kun-aggregeringsmodstridelse rapporterer én gruppediagnostik ved regnearkets EOF; lagring afspiller hvert oprindeligt postlegeme byte for byte
Store markeringer
Områdeanalyse og -normalisering, strukturel omkortlægning og snapshotkonstruktion bruger engangsgennemløbsbyggere eller geometrisk kapacitetsvækst, så store valggrupper forbliver amortiseret lineære
Rude-scrollkoordinater
TryGetWindowScroll returnerer den første synlige celle for én logisk rude, og ScrollWindow ændrer den, med 1-baserede regnearksrække- og kolonnekoordinater i begge motorer
Øverste ruder deler hele vinduets række, nederste ruder deler den nederste ruderække, venstre ruder deler hele vinduets kolonne, og højre ruder deler højre ruderkolonne
En manglende rude returnerer False uden at oprette visningstilstand, med forespørgselsoutput sat til nul; ugyldige koordinater returnerer også False, før nogen akse ændres
Classic XLS bevarer den øverste og venstre akse i Window2 og den nederste og højre akse i Pane, mens XLSX bevarer de tilsvarende sheetView- og pane-topLeftCell-værdier uafhængigt
Atomære opdateringer
SelectAreas validerer hver A1-reference og det aktive indeks, før regnearkets skrivetransaktion hentes
Metoden returnerer False for fejlformateret eller tomt input, et ugyldigt aktivt indeks eller en rude, der ikke findes i den aktuelle opdelings- eller frysgeometri, med det tidligere valg uændret
Et vellykket kald returnerer True og bevarer de eksisterende motor-specifikke valgobjekter og legacy-API'er
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
Det klassiske SelectAreas(const Areas; ActiveAreaIndex)-overload og XLSX-overloadet SelectAreas(const Areas; ActiveAreaIndex; APane) forbliver tilgængelige uændret
De klassiske ScrollRow- og ScrollColumn-egenskaber og XLSX'ens nulbaserede SetPaneScroll-, GetPaneScroll-, ScrollRow- og ScrollCol-medlemmer forbliver også tilgængelige uændret
Den fælles facade konverterer eksplicit logiske rudenavne, så kaldere ikke afhænger af de numeriske rudekoder, som nogen af filformaterne bruger