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

Главная категория => Макросы => Тема начата: ost от 13 марта 2021, 16:45

Название: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.
Отправлено: ost от 13 марта 2021, 16:45
Доброго.
Собственно, сабж. Речь о снятии галки "Защищено", во вкладке "Защита ячейки" окна "Формат ячеек".
Спасибо.
Название: Re: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.
Отправлено: ost от 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)". Количество строк на листе может быть разным же.
Название: Re: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.
Отправлено: eeigor от 13 марта 2021, 17:05
Не надо вычислять то, что уже известно и так.
.ActiveSheet.RangeAddress.EndRow
Получите ссылку на лист и работайте с ним.

UPD:
Не уверен, но есть UsedRange, а всего листа как бы и нет. То есть, если установить какой-то параметр для всего листа, то не буде ли добавлено в память несколько миллионов пустых ячеек. Можно сравнить с размером файла до и после
Название: Re: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.
Отправлено: ost от 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


=). Работает.
Название: Re: LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.
Отправлено: eeigor от 13 марта 2021, 20:12
Объем, вроде как, вырос на 20 КБ.
Но зачем это делать, не понятно.
    aCellProtection = CreateUnoStruct("com.sun.star.util.CellProtection")
   aCellProtection.IsLocked = False
   ThisComponent.CurrentController.ActiveSheet.CellProtection = aCellProtection