Advertisement
Namokonov

create_protection_remove_protection

Jan 13th, 2022
1,559
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //ЗАЩИЩАЕМ СТРОКУ ЕСЛИ ПОЛЬЗОВАТЕЛЬ ВЫБРАЛ ЧЕКБОКС
  2. //И УБИРАЕМ ЗАЩИТУ, ЕСЛИ ПОЛЬЗОВАТЕЛЬ СНЯЛ ЧЕКБОКС
  3.  
  4. //определяем номер столбца с чекбоксом
  5. //определяем название листа, на котором будет работать скрипт
  6. //определяем количество строк для закрытия
  7. const [column_n_checkbox, work_sh_name] = [6, 'Лист1']
  8.  
  9. function close_or_open_row(e) {
  10.   //определяем диапазон, который редактируется
  11.   var r = e.range;
  12.  
  13.   //определяем активный лист
  14.   var sh = r.getSheet();
  15.  
  16.   //проверяем столбец редактирования и то, что чекбокс выбран
  17.   if (r.getColumn() == column_n_checkbox && sh.getName() == work_sh_name) {
  18.     //определяем номер строки, которая редактируется
  19.     var rowN = r.getRow();
  20.  
  21.     //определяем строку
  22.     var range = sh.getRange(`${rowN}:${rowN}`)
  23.  
  24.     //если пользователь активировал чекбокс - закрываем строку от всех кроме себя
  25.     if (e.value == 'TRUE') {
  26.  
  27.       //запускаем функцию protect_range, в неё передаем диапазон
  28.       protect_range(range);
  29.  
  30.       //если пользователь отключил чекбокс - удаляем защиту строку
  31.     } else {
  32.       //запускаем функцию remove_protect, в неё передаем активный лист и диапазон
  33.       remove_protect(sh, range);
  34.     }
  35.     //вставляем в примечание чекбокса дату
  36.     r.setNote(new Date())
  37.   }
  38. }
  39.  
  40. function protect_range(range) {
  41.   //защищаем диапазон
  42.   var protection = range.protect();
  43.  
  44.   //удаляем всех редакторов из диапазона, которых можем удалить
  45.   protection.removeEditors(protection.getEditors());
  46.  
  47.  
  48.   if (protection.canDomainEdit()) {
  49.     protection.setDomainEdit(false);
  50.     sheet.toast('protection set')
  51.   }
  52. }
  53.  
  54. function remove_protect(sheet, range) {
  55.   //выводим границы диапазона в текстовой строке (например, "a1:a4")
  56.   var range_a1 = range.getA1Notation();
  57.  
  58.   //определяем все защищенные диапазоны листа
  59.   var protections = sheet.getProtections(SpreadsheetApp.ProtectionType.RANGE);
  60.  
  61.   //в цикле проходим каждый
  62.   for (x in protections) {
  63.     var protection = protections[x];
  64.  
  65.     //проверяем, защищенный диапазон ли это, можем ли мы его редактировать и совпадают ли его границы с заданными
  66.     if (protection && protection.canEdit() && protection.getRange().getA1Notation() == range_a1) {
  67.  
  68.       //если да - удаляем диапазон, выводим 'protection remove' и выходим из цикла
  69.       protection.remove();
  70.       sheet.toast('protection remove')
  71.       return;
  72.     }
  73.   }
  74. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement