Невозможно защитить диапазон на основе дня недели с помощью скриптов Google - PullRequest
0 голосов
/ 04 марта 2020

В листах Google я пытаюсь создать скрипт для блокировки диапазона на основе дня недели на 12 часов, когда он затем разблокируется. Идея состоит в том, что пользователи не смогут редактировать столбец в день, который он представляет, но разрешено избрать несколько администраторов.

Проблема, с которой я сталкиваюсь, заключается в том, что range.protect, похоже, не считается функцией, и мои редакторы не получают разрешение, только я. Я пытался следовать этому шаблону с помощью Google https://developers.google.com/apps-script/reference/spreadsheet/protection, но без особого успеха.

  var meeditor = "me@gmail.com"
  var myeditors = ["editor@gmail.com", "editor@gmail.com", "editor@gmail.com" "editor@gmail.com"]
  var sheet = SpreadsheetApp.getActive().getSheetByName("sign ups");
  var d = new Date();
  var n = d.getDay();
  if (n == 1)  {  //monday
    var range = ['C5:C20'];
    var rangesToUnProtect = ['B5:B20'];
    }
  if (n == 2) { //tuesday
    var range = ['D5:D20'];
    var rangesToUnProtect = ['C5:C20'];
  }
  if (n == 3) {  //wednesday
    var range = ['E5:E20'];
    var rangesToUnProtect = ['D5:D20'];
  }
  if (n == 4) {  //thursday
    var range = ['F5:F20'];
    var rangesToUnProtect = ['E5:E20'];
  }
  if (n == 5) {  //friday
    var range = ['G5:G20'];
    var rangesToUnProtect = ['F5:F20'];
  }
  if (n == 6) {   //saturday
    var range = ['H5:H20'];
    var rangesToUnProtect = ['G5:G20'];
  }
  if (n == 0) {  //sunday
    var range = ['B5:B20'];
    var rangesToUnProtect = ['H5:H20'];
  }
  var protection = range.protect().setDescription('no more signing up');

  protection.addEditor(meeditor) //keep myself editor
  protection.addEditors(myeditors)

  protection.removeEditors(protection.getEditors());  /remove permissions from all others
  if (protection.canDomainEdit()) {
  protection.setDomainEdit(false);
    for (var i = 0; i < rangesToUnProtect.length; i++) {  \\remove the protection the next day
  var protection = protections[i];
  if (protection.canEdit()) {
    protection.remove();
  }

}
}
}

Я довольно новичок в этом, и я уверен, что я не делаю это оптимально. Как мне определить это правильно? Это напоминает эту ошибку https://issuetracker.google.com/issues/148894990, но это должно было быть исправлено.

1 Ответ

1 голос
/ 05 марта 2020

Причина, по которой вы получаете приведенную ниже ошибку, заключается в том, что вы не объявляете диапазон как диапазон, а как строку , а метод protect является методом, определяющим c к объекту Range Class или Sheet Class, не применимо к объекту string.

TypeError: range.protect не является функцией

В порядке чтобы получить диапазон , вы должны изменить все свои var range переменные из этого:

var range = ['RANGE1'];
var rangesToUnProtect = ['RANGE2'];

на это:

var range = sheet.getRange("RANGE1");
var rangesToUnProtect = sheet.getRange("RANGE2");

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...