HotXLS-dokumentation

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