Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

1 Декабрь 2020, 08:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Выделение нескольких диапазонов макросом  (Прочитано 418 раз)
0 Пользователей и 1 Гость смотрят эту тему.
GOGUGAN
Новичок
*
Offline Offline

Сообщений: 2


« Стартовое сообщение: 17 Ноябрь 2020, 15:30 »

Добрый день, господа!

Прошу помощи в составлении следующего макроса: требуется удалить данные в нескольких диапазонах ячеек.
Составлен следующий рабочий макрос:

Код:
Sub CLEAN
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = ThisComponent
Doc.Sheets(0).getCellRangebyName("C2:G5").clearContents(7)
Doc.Sheets(0).getCellRangebyName("B7:G10").clearContents(7)
Doc.Sheets(0).getCellRangebyName("E14:E17").clearContents(7)
Doc.Sheets(0).getCellRangebyName("G20:G23").clearContents(7)
Doc.Sheets(0).getCellRangebyName("G25:G28").clearContents(7)
End Sub

Удаление происходит в 5 этапов, возможно ли объединить указанные диапазоны одной командой и удалить данные в них в один этап?

Заранее спасибо за помощь!
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 019


« Ответ #1: 17 Ноябрь 2020, 16:05 »

Если прописать
Код:
ThisComponent.LockControllers
...
ThisComponent.unLockControllers
то, для пользователя диапазоны исчезнут одномоментно Улыбка

Хотя они и так почти сразу все вычищаются.
« Последнее редактирование: 17 Ноябрь 2020, 16:15 от Bigor » Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 197



« Ответ #2: 17 Ноябрь 2020, 16:46 »

удалить данные в нескольких диапазонах
По ссылке раздел: Group of ranges  Create and add ranges
https://wiki.documentfoundation.org/Macros/Basic/Calc/Ranges

Метод addRangeAddress
https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellRangeContainer.html
« Последнее редактирование: 17 Ноябрь 2020, 16:57 от eeigor » Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 229


WWW
« Ответ #3: 17 Ноябрь 2020, 17:05 »

Тот же метод, что и в предыдущем ответе:

Код:
Sub TestRanges
  Dim oRanges, v
  oRanges=ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
  For Each v In Array("C2:G5", "B7:G10", "E14:E17", "G20:G23", "G25:G28")
    oRanges.addRangeAddress ThisComponent.Sheets(0).getCellRangebyName(v).getRangeAddress, False ' True, если надо объединять без пересечений
  Next v  

  oRanges.clearContents(7)
End Sub

Нужно учитывать, что у сервиса SheetCellRanges палитра методов гораздо беднее, чем у сервиса SheetCellRange.
« Последнее редактирование: 17 Ноябрь 2020, 17:12 от sokol92 » Записан

Владимир.
GOGUGAN
Новичок
*
Offline Offline

Сообщений: 2


« Ответ #4: 17 Ноябрь 2020, 22:17 »

Господа, благодарю за ответы! Это именно то, что требовалось!

Тему можно закрывать.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!