HotXLS-documentatie

API voor werkbladvensterdeelselectie

TXLSWorksheet en TXLSXWorksheet bieden dezelfde vensterdeelbewuste methoden om geselecteerde cel- en bereikgebieden te lezen of te vervangen

Gedeelde typen en methoden

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;

Gebiedstekst gebruikt A1-cel- of bereikverwijzingen, en ActiveAreaIndex is een zero-based index in de teruggegeven of aangeleverde gebiedsreeks

De gebiedsreeks behoudt de bronvolgorde en mag overlappende bereiken bevatten, omdat selectievolgorde en overlap deel uitmaken van de weergavestatus van het werkblad

Eigendom van de momentopname

GetSelectedAreas geeft een nieuwe dynamische array terug waarvan de tekenreeksen en de lengte aan de aanroeper toebehoren, zodat het wijzigen of vrijgeven van het resultaat het werkblad niet kan veranderen

Wanneer het gevraagde vensterdeel geen weergegeven selectiegroep heeft, is het resultaat leeg en is ActiveAreaIndex gelijk aan -1

Het lezen van een ontbrekend vensterdeel maakt nooit een vensterdeel, selectieobject, cel of bereik in de werkmap aan

Recordaggregatie in klassieke XLS

Klassieke XLS houdt voor elk vensterdeel een onafhankelijke logische selectiegroep bij en aggregeert opeenvolgende BIFF-Selection-records met dezelfde vensterdeelcode in bronvolgorde

De actieve rij, actieve kolom en ActiveAreaIndex worden gedeeld door elk record in één groep, en de index adresseert de volledige geaggregeerde gebiedsreeks in plaats van één fysiek record

Het opslaan van een onaangeroerde groep behoudt de oorspronkelijke recordhoofdteksten, terwijl een bewerkte groep wordt weggeschreven in opeenvolgende blokken van ten hoogste 1369 gebieden met dezelfde geaggregeerde actieve index in elk blok

Het bewerken van het ene vensterdeel laat de groepen van de andere vensterdelen ongewijzigd, en kopieën van de werkmap behouden de volledige vensterdeelselectiestatus

Structurele bewerkingen

Toevoegingen of verwijderingen van hele rijen of hele kolommen wijzen de geordende selectiegroepen opnieuw toe voor elk weergegeven vensterdeel in beide werkmapengines

Blijvende gebieden behouden hun volgorde en de identiteit van het actieve gebied; als het actieve gebied wordt verwijderd, wordt de eerstvolgende blijvende opvolger geselecteerd, gevolgd door de laatste blijvende voorganger wanneer er geen opvolger resteert

Als elk gebied wordt verwijderd, wordt de groep één cel op de verwijderingsgrens, terwijl een actieve cel buiten het gekozen blijvende gebied terugvalt op de cel linkboven in dat gebied

Ongeldige klassieke records

Misvormde, niet-aaneengesloten of tegenstrijdige klassieke Selection-records blijven ondoorzichtig en worden niet blootgesteld via de getypeerde gebiedsquery

Een fysiek record dat tijdens recordvalidatie wordt afgewezen meldt xlsDiagnosticSelectionRecordInvalid met diagnostische code 1304, terwijl een alleen de aggregatie betreffende tegenstrijdigheid één groepsdiagnostiek meldt aan het EOF van het werkblad; opslaan speelt elke oorspronkelijke recordhoofdtekst byte voor byte opnieuw af

Grote selecties

Het parseren en normaliseren van gebieden, structurele hertoewijzing en het opbouwen van momentopnames gebruiken eenmalige doorlooptechnieken of geometrische capaciteitsgroei, zodat grote selectiegroepen geamortiseerd lineair blijven

Vensterdeel-scrollcoördinaten

TryGetWindowScroll geeft de eerste zichtbare cel van één logisch vensterdeel terug en ScrollWindow wijzigt die, met 1-gebaseerde werkbladrij- en kolomcoördinaten in beide engines

Bovenste vensterdelen delen de rij van het totale venster, onderste vensterdelen delen de rij van het onderste vensterdeel, linker vensterdelen delen de kolom van het totale venster en rechter vensterdelen delen de kolom van het rechter vensterdeel

Een ontbrekend vensterdeel geeft False terug zonder weergavestatus aan te maken, waarbij de query-uitvoer op nul wordt gezet; ongeldige coördinaten geven ook False terug voordat een as wordt gewijzigd

Klassieke XLS bewaart de bovenste en linker assen in Window2 en de onderste en rechter assen in Pane, terwijl XLSX de overeenkomstige sheetView- en pane-topLeftCell-waarden onafhankelijk behoudt

Atomieke updates

SelectAreas valideert elke A1-verwijzing en de actieve index voordat de schrijftransactie van het werkblad wordt verkregen

De methode geeft False terug voor misvormde of lege invoer, een ongeldige actieve index of een vensterdeel dat niet bestaat in de huidige splitsings- of blokkeergeometrie, waarbij de vorige selectie ongewijzigd blijft

Een geslaagde aanroep geeft True terug en behoudt de bestaande enginespecifieke selectieobjecten en verouderde API's

Delphi-voorbeeld

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

Compatibiliteit

De klassieke overload SelectAreas(const Areas; ActiveAreaIndex) en de XLSX-overload SelectAreas(const Areas; ActiveAreaIndex; APane) blijven ongewijzigd beschikbaar

De klassieke eigenschappen ScrollRow en ScrollColumn en de zero-based XLSX-leden SetPaneScroll, GetPaneScroll, ScrollRow en ScrollCol blijven eveneens ongewijzigd beschikbaar

De gedeelde façade converteert logische vensterdeelnamen expliciet, zodat aanroepers niet afhankelijk zijn van de numerieke vensterdeelcodes die een van beide bestandsformaten gebruikt