Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ЗАЩИЩАЕМ СТРОКУ ЕСЛИ ПОЛЬЗОВАТЕЛЬ ВЫБРАЛ ЧЕКБОКС
- //И УБИРАЕМ ЗАЩИТУ, ЕСЛИ ПОЛЬЗОВАТЕЛЬ СНЯЛ ЧЕКБОКС
- //определяем номер столбца с чекбоксом
- //определяем название листа, на котором будет работать скрипт
- //определяем количество строк для закрытия
- const [column_n_checkbox, work_sh_name] = [6, 'Лист1']
- function close_or_open_row(e) {
- //определяем диапазон, который редактируется
- var r = e.range;
- //определяем активный лист
- var sh = r.getSheet();
- //проверяем столбец редактирования и то, что чекбокс выбран
- if (r.getColumn() == column_n_checkbox && sh.getName() == work_sh_name) {
- //определяем номер строки, которая редактируется
- var rowN = r.getRow();
- //определяем строку
- var range = sh.getRange(`${rowN}:${rowN}`)
- //если пользователь активировал чекбокс - закрываем строку от всех кроме себя
- if (e.value == 'TRUE') {
- //запускаем функцию protect_range, в неё передаем диапазон
- protect_range(range);
- //если пользователь отключил чекбокс - удаляем защиту строку
- } else {
- //запускаем функцию remove_protect, в неё передаем активный лист и диапазон
- remove_protect(sh, range);
- }
- //вставляем в примечание чекбокса дату
- r.setNote(new Date())
- }
- }
- function protect_range(range) {
- //защищаем диапазон
- var protection = range.protect();
- //удаляем всех редакторов из диапазона, которых можем удалить
- protection.removeEditors(protection.getEditors());
- if (protection.canDomainEdit()) {
- protection.setDomainEdit(false);
- sheet.toast('protection set')
- }
- }
- function remove_protect(sheet, range) {
- //выводим границы диапазона в текстовой строке (например, "a1:a4")
- var range_a1 = range.getA1Notation();
- //определяем все защищенные диапазоны листа
- var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
- //в цикле проходим каждый
- for (x in protections) {
- var protection = protections[x];
- //проверяем, защищенный диапазон ли это, можем ли мы его редактировать и совпадают ли его границы с заданными
- if (protection && protection.canEdit() && protection.getRange().getA1Notation() == range_a1) {
- //если да - удаляем диапазон, выводим 'protection remove' и выходим из цикла
- protection.remove();
- sheet.toast('protection remove')
- return;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement