API de selecție a panourilor foii de lucru
TXLSWorksheet și TXLSXWorksheet expun aceleași metode conștiente de panouri pentru citirea sau înlocuirea zonelor selectate de celule și intervale
Tipuri și metode comune
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;
Textul zonelor folosește referințe A1 de celulă sau de interval, iar ActiveAreaIndex este un indice cu bază zero în secvența de zone returnată sau furnizată
Secvența de zone păstrează ordinea sursei și poate conține intervale suprapuse, deoarece ordinea selecției și suprapunerea fac parte din starea de vizualizare a foii de lucru
Proprietatea instantaneului
GetSelectedAreas returnează un tablou dinamic nou ale cărui șiruri și lungime aparțin apelantului, astfel încât modificarea sau eliberarea rezultatului nu poate altera foaia de lucru
Când panoul cerut nu are niciun grup de selecție reprezentat, rezultatul este gol și ActiveAreaIndex este -1
Citirea unui panou lipsă nu creează niciodată un panou, un obiect de selecție, o celulă sau un interval în registrul de lucru
Agregarea înregistrărilor Classic XLS
Classic XLS păstrează un grup logic de selecție independent pentru fiecare panou și agregă înregistrările BIFF Selection consecutive cu același cod de panou în ordinea sursei
Rândul activ, coloana activă și ActiveAreaIndex sunt partajate de fiecare înregistrare dintr-un grup, iar indicele adresează întreaga secvență agregată de zone, nu o singură înregistrare fizică
Salvarea unui grup neatins îi păstrează corpurile originale de înregistrări, în timp ce un grup editat este scris în blocuri consecutive de cel mult 1369 de zone cu același indice agregat activ în fiecare bloc
Editarea unui panou lasă grupurile celorlalte panouri neschimbate, iar copiile foii de lucru păstrează starea completă de selecție a panourilor
Editări structurale
Inserările sau ștergerile de rânduri și coloane întregi remapează grupurile de selecție ordonate pentru fiecare panou reprezentat în ambele motoare de registru de lucru
Zonele care supraviețuiesc își păstrează ordinea și identitatea zonei active; dacă zona activă este eliminată, este selectat primul succesor care supraviețuiește, urmat de ultimul predecesor care supraviețuiește atunci când nu rămâne niciun succesor
Dacă fiecare zonă este eliminată, grupul devine o celulă la limita ștergerii, iar o celulă activă din afara zonei supraviețuitoare alese revine la celula din colțul din stânga sus al acelei zone
Înregistrări clasice invalide
Înregistrările Classic Selection malformate, necontigue sau contradictorii rămân opace și nu sunt expuse prin interogarea tipizată a zonelor
O înregistrare fizică respinsă în timpul validării înregistrărilor raportează xlsDiagnosticSelectionRecordInvalid cu codul de diagnostic 1304, în timp ce o contradicție doar la nivel de agregare raportează un diagnostic de grup la EOF-ul foii de lucru; salvarea reia fiecare corp original de înregistrare octet cu octet
Selecții mari
Analiza și normalizarea zonelor, remaparea structurală și construirea instantaneului folosesc constructori cu o singură trecere sau creștere geometrică a capacității, astfel încât grupurile mari de selecție rămân liniare amortizate
Coordonate de derulare ale panoului
TryGetWindowScroll returnează prima celulă vizibilă pentru un panou logic, iar ScrollWindow o schimbă, folosind coordonate de rând și coloană ale foii de lucru cu indexare de la 1 în ambele motoare
Panourile superioare partajează rândul întregii ferestre, panourile inferioare partajează rândul panoului inferior, panourile din stânga partajează coloana întregii ferestre, iar panourile din dreapta partajează coloana panoului din dreapta
Un panou lipsă returnează False fără a crea stare de vizualizare, cu rezultatele interogării setate la zero; coordonatele invalide returnează de asemenea False înainte ca orice axă să fie schimbată
Classic XLS persistă axele superioară și stângă în Window2 și axele inferioară și dreaptă în Pane, în timp ce XLSX reține valorile topLeftCell corespunzătoare din sheetView și pane în mod independent
Actualizări atomice
SelectAreas validează fiecare referință A1 și indicele activ înainte de a obține tranzacția de scriere a foii de lucru
Metoda returnează False pentru intrare malformată sau goală, un indice activ invalid sau un panou care nu există în geometria curentă de împărțire sau de înghețare, cu selecția anterioară lăsată neschimbată
Un apel reușit returnează True și păstrează obiectele de selecție existente specifice motorului și API-urile legacy
Exemplu Delphi
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);
Compatibilitate
Supraîncărcarea clasică SelectAreas(const Areas; ActiveAreaIndex) și supraîncărcarea XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) rămân disponibile neschimbate
Proprietățile clasice ScrollRow și ScrollColumn și membrii XLSX cu bază zero SetPaneScroll, GetPaneScroll, ScrollRow și ScrollCol rămân de asemenea disponibili neschimbați
Façade-ul comun convertește explicit numele logice ale panourilor, astfel încât apelanții nu depind de codurile numerice de panou folosite de oricare format de fișier