LibreOffice Basic. Как снять защиту со всех ячеек листа Calc из макроса.

Автор ost, 13 марта 2021, 16:45

0 Пользователи и 1 гость просматривают эту тему.

ost

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

ost

Сделал так:

oAllCells = oSheet.getCellRangeByPosition(0,0,1023,1048575)
CellsPrtct =  oAllCells.CellProtection
CellsPrtct.IsLocked = false
oAllCells.CellProtection = CellsPrtct


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

eeigor

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

UPD:
Не уверен, но есть UsedRange, а всего листа как бы и нет. То есть, если установить какой-то параметр для всего листа, то не буде ли добавлено в память несколько миллионов пустых ячеек. Можно сравнить с размером файла до и после
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

ost

Пока сделал так:

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

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

Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community