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

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

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

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.  (Прочитано 386 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ost
Форумчанин
***
Offline Offline

Сообщений: 175


« Стартовое сообщение: 13 Март 2021, 16:45 »

Доброго.
Собственно, сабж. Речь о снятии галки "Защищено", во вкладке "Защита ячейки" окна "Формат ячеек".
Спасибо.
Записан
ost
Форумчанин
***
Offline Offline

Сообщений: 175


« Ответ #1: 13 Март 2021, 16:56 »

Сделал так:
Код:
oAllCells = oSheet.getCellRangeByPosition(0,0,1023,1048575)
CellsPrtct =  oAllCells.CellProtection
CellsPrtct.IsLocked = false
oAllCells.CellProtection = CellsPrtct

Работает, но смущает "oAllCells = oSheet.getCellRangeByPosition(0,0,1023,1048575)". Количество строк на листе может быть разным же.
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #2: 13 Март 2021, 17:05 »

Не надо вычислять то, что уже известно и так.
.ActiveSheet.RangeAddress.EndRow
Получите ссылку на лист и работайте с ним.

UPD:
Не уверен, но есть UsedRange, а всего листа как бы и нет. То есть, если установить какой-то параметр для всего листа, то не буде ли добавлено в память несколько миллионов пустых ячеек. Можно сравнить с размером файла до и после
« Последнее редактирование: 13 Март 2021, 17:40 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
ost
Форумчанин
***
Offline Offline

Сообщений: 175


« Ответ #3: 13 Март 2021, 19:32 »

Пока сделал так:
Код:
oBook = ThisComponent
sSheet = oBook.getCurrentController.getActiveSheet().Name
oSheet = oBook.Sheets.getByName(sSheet)
oAllCells = oSheet.getCellRangeByPosition(0, 0, oSheet.RangeAddress.EndColumn, oSheet.RangeAddress.EndRow)
CellsPrtct =  oAllCells.CellProtection
CellsPrtct.IsLocked = false
oAllCells.CellProtection = CellsPrtct

=). Работает.
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #4: 13 Март 2021, 20:12 »

Объем, вроде как, вырос на 20 КБ.
Но зачем это делать, не понятно.
Код:
    aCellProtection = CreateUnoStruct("com.sun.star.util.CellProtection")
    aCellProtection.IsLocked = False
    ThisComponent.CurrentController.ActiveSheet.CellProtection = aCellProtection
Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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