Защита строки, когда раскрывающееся меню изменяется на «Заблокировано» с помощью скриптов приложения - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь просто защитить всю строку (добавить редакторы), когда кто-то меняет раскрывающееся меню на «Заблокировано», даже защищенное раскрывающееся меню должно находиться в той же строке.Это то, что я хочу реализовать практически во всех строках листа.

Я нашел несколько ресурсов, которые помогают, но я не могу объединить их должным образом, был бы очень благодарен за любую помощь!

Ниже приведены некоторые полезные ссылки, которые я нашел.

Google листы: условно защитить ячейки?

Защита ячеек на основе содержимого других ячеек в Google Sheets

Защита диапазонов с помощью скрипта Google Apps

1 Ответ

0 голосов
/ 11 сентября 2018

Добавьте этот код в редактор сценариев вашей электронной таблицы и установите триггер onEdit для указанной ниже функции.

Замените строку email@gmail.com в коде вашей реальной электронной почты

ПРИМЕЧАНИЕ. В этом сценарии предполагается, что в первой строке листа может быть три параметра в зависимости от того, какая защита этого диапазона контролируется.

Блокировка: блокирует этот конкретный столбец

Разблокировать: разблокирует данный столбец

пусто: ничего не делает

function onEdit(e){
  var x = [e.range.columnStart,e.range.rowStart,e.range.columnEnd,e.range.rowEnd]
  if (x[0]==x[2] && x[1]==1 && x[3]==1){
    var lockRangeStart = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1,x[0]).getA1Notation();
    var lastCol = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow();
    var lockRangeName = (lockRangeStart+":"+lockRangeStart.match(/(\D*)/)[1]+lastCol);
    var lockRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(lockRangeName);
    if(e.value == "Lock"){
      var protection = lockRange.protect().setDescription('Locked Range');
      protection.addEditor("email@gmail.com");
      protection.removeEditors(protection.getEditors());
      if (protection.canDomainEdit()) {
        protection.setDomainEdit(false);
      }
    }
    else  if(e.value == "Unlock") {
      var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var protections = ss.getProtections(SpreadsheetApp.ProtectionType.RANGE);
      for (var i = 0; i < protections.length; i++) {
        var protection = protections[i];
        if (protection.canEdit() && protection.getRange().getA1Notation() == lockRangeName ) {
          protection.remove();
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...