API за избор на панели на работен лист
TXLSWorksheet и TXLSXWorksheet разкриват едни и същи методи, осъзнати за панелите, за четене или заместване на избрани области от клетки и диапазони
Споделени типове и методи
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;
Текстът на областта използва препратки A1 към клетка или диапазон, а ActiveAreaIndex е индекс, броен от нула, в върнатата или подадената последователност от области
Последователността от области запазва изходния ред и може да съдържа застъпващи се диапазони, защото редът на избора и застъпването са част от състоянието на изгледа на работния лист
Притежание на снимката
GetSelectedAreas връща нов динамичен масив, чиито низове и дължина принадлежат на извикващия, така че промяната или освобождаването на резултата не може да промени работния лист
Когато заявенят панел няма представена група за избор, резултатът е празен, а ActiveAreaIndex е -1
Четенето на липсващ панел никога не създава панел, обект за избор, клетка или диапазон в работната книга
Агрегиране на класически записи XLS
Classic XLS пази независима логическа група за избор за всеки панел и агрегира последователни BIFF записи Selection с еднакъв код на панела в изходния ред
Активният ред, активната колона и ActiveAreaIndex са споделени от всеки запис в една група, а индексът адресира пълната агрегирана последователност от области, а не един физически запис
Записването на недокосната група запазва оригиналните ѝ тела на записи, докато редактирана група се записва в последователни парчета от най-много 1369 области с един и същ агрегиран активен индекс във всяко парче
Редактирането на един панел оставя групите на другите панели непроменени, а копията на работния лист запазват пълното състояние на избора на панелите
Структурни редакции
Вмъкванията или изтриванията на цели редове и колони пренасочват подредените групи за избор за всеки представен панел и в двата двигателя на работни книги
Оцелелите области запазват своя ред и идентичността на активната област; ако активната област бъде премахната, се избира първият оцелял наследник, последван от последния оцелял предшественик, когато не остава наследник
Ако всяка област бъде премахната, групата става една клетка на границата на изтриването, докато активна клетка извън избраната оцеляла област се връща към горната лява клетка на тази област
Невалидни класически записи
Грешно формирани, несъседни или противоречиви класически записи Selection остават непрозрачни и не се излагат чрез типизираното запитване за области
Физически запис, отхвърлен при валидацията на записи, докладва xlsDiagnosticSelectionRecordInvalid с диагностичен код 1304, докато противоречие само на ниво агрегация докладва една диагностична група на EOF на работния лист; записването възпроизвежда всяко оригинално тяло на запис байт по байт
Големи избори
Анализът и нормализацията на области, структурното пренасочване и изграждането на снимката използват еднопроходни изграждачи или геометричен растеж на капацитета, така че големите групи за избор остават амортизирано линейни
Координати на превъртане на панела
TryGetWindowScroll връща първата видима клетка за един логически панел, а ScrollWindow я променя, използвайки координати на ред и колона на работния лист, броени от единица, и в двата двигателя
Горните панели споделят реда на целия прозорец, долните панели споделят долния ред на панела, левите панели споделят колоната на целия прозорец, а десните панели споделят колоната на десния панел
Липсващ панел връща False без създаване на състояние на изглед, с изходите на запитването зададени на нула; невалидни координати също връщат False, преди която и да е ос да бъде променена
Classic XLS съхранява горната и лявата ос в Window2, а долната и дясната ос в Pane, докато XLSX задържа съответните стойности topLeftCell на sheetView и pane независимо
Атомарни обновявания
SelectAreas валидира всяка A1 препратка и активния индекс, преди да получи транзакцията за запис на работния лист
Методът връща False за грешно формиран или празен вход, невалиден активен индекс или панел, който не съществува в текущата геометрия на разделяне или замразяване, като предишният избор остава непроменен
Успешно извикване връща True и запазва съществуващите специфични за двигателя обекти за избор и legacy API
Пример за 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);
Съвместимост
Класическото претоварване SelectAreas(const Areas; ActiveAreaIndex) и претоварването за XLSX SelectAreas(const Areas; ActiveAreaIndex; APane) остават налични непроменени
Класическите свойства ScrollRow и ScrollColumn и членове на XLSX, броени от нула, като SetPaneScroll, GetPaneScroll, ScrollRow и ScrollCol, също остават налични непроменени
Фасадата преобразува изрично логическите имена на панелите, така че извикващите не зависят от числовите кодове на панелите, използвани от която и да е файлова формат