Добавить или удалить редакторы в 1-й защите на нескольких листах - PullRequest
0 голосов
/ 10 января 2020

добрый день! У меня есть несколько листов с 1 защитой каждый, и я хочу l oop среди этих листов и добавить или удалить редакторы в их защитах.

Изначально у меня есть этот код:

function AddOrRemove() {
  var spreadsheet = SpreadsheetApp.getActive();
  var allProtections = spreadsheet.getActiveSheet().getProtections(SpreadsheetApp.ProtectionType.SHEET);
  var protection = allProtections[0];
  protection.removeEditors(['email1@gmail.com']);
  protection.addEditors(['email2@gmail.com']);
};

Это удаляет email1@gmail.com, в то время как добавляет email2@gmail.com к ActiveSheet, что означает, что мне нужно вручную go к каждому листу и запустить его оттуда. Тем не менее, я хочу автоматизировать зацикливание листов, и поэтому придумаю следующий код:

function AddOrRemove() {
  var sheets = ["Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6","Sheet7","Sheet8","Sheet9","Sheet10"];
  for (var i = 0 ; i = 15 ; i++){
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheets[i]);
    var allProtections = spreadsheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
    var protection = allProtections[0];
    protection.removeEditors(['email1@gmail.com']);
    protection.addEditors(['email2@gmail.com']);
  }
};

, где sheets - все имена листов, к которым я хочу запустить код. Тем не менее, при попытке запустить его, я сталкиваюсь с этой ошибкой:

TypeError: Cannot call method "getProtections" of null. (line 5, file "AddOrRemoveEditors")

Я пытался Logger.log(sheets[i]); непосредственно перед var Spreadsheets в for для l oop, и он записывает "ноль". Однако, когда я ставлю Logger.log(sheets[0]); перед для l oop, он корректно возвращает K. Я не совсем уверен, чего здесь не хватает. Я чувствую, что логика c за кодом должна работать, но, возможно, я что-то упустил. Просить совета по этому вопросу. Спасибо!

1 Ответ

0 голосов
/ 10 января 2020

попробуйте это:

function AddOrRemove() {
  var sheets = ["Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6","Sheet7","Sheet8","Sheet9","Sheet10"];
  for (var i=0;i<sheets.length;i++){//modified
    var spreadsheet = SpreadsheetApp.getActive().getSheetByName(sheets[i]);//modified
    var allProtections = spreadsheet.getProtections(SpreadsheetApp.ProtectionType.SHEET);
    var protection = allProtections[0];
    protection.removeEditors(['email1@gmail.com']);
    protection.addEditors(['email2@gmail.com']);
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...