Скрипт дублирования листа: защита не установлена, когда другой пользователь запускает скрипт - PullRequest
0 голосов
/ 06 августа 2020

Я делюсь таблицей Google с другими, и общий доступ разрешен только с идентификаторами электронной почты. Я создал сценарий, который при запуске дублирует мастер-лист и устанавливает разрешения и защиту, как в мастер-листе, на дублированный лист. На мастер-листе есть кнопка для выполнения этого сценария.

Когда я (владелец) запускает сценарий, средства защиты копируются нормально, и другие пользователи не могут получить доступ к защищенным ячейкам, но проблема возникает, когда другие редакторы листа запустите сценарий, новый созданный лист дает им полный доступ к редактированию всех защищенных полей.

Написанный мной код выглядит следующим образом:

function Protect() {
  var spreadsheet = SpreadsheetApp.getActive();
  var myValue = SpreadsheetApp.getActiveSheet().getSheetName();
  spreadsheet.duplicateActiveSheet();
  var totalSheets = countSheets() - 3;
  myValue = "DO" + totalSheets;
  SpreadsheetApp.getActiveSpreadsheet().renameActiveSheet(myValue);
  var protection = spreadsheet.getActiveSheet().protect();
  protection.setUnprotectedRanges([spreadsheet.getRange('C2:E5'), spreadsheet.getRange('C6:D6'), spreadsheet.getRange('F5:G5'), spreadsheet.getRange('F6:G6'), spreadsheet.getRange('B9:B18'), spreadsheet.getRange('C9:G18'), spreadsheet.getRange('D20:D22'), spreadsheet.getRange('G20:G22'), spreadsheet.getRange('B20:B22'), spreadsheet.getRange('E21'), spreadsheet.getRange('E20')])
    .removeEditors(['user2@domain.com', 'user3@domain.com']);
  spreadsheet.getRange('G2').activate();
  spreadsheet.getRange('G2').setValue(myValue);
  spreadsheet.getRange('G3').activate();
  spreadsheet.getRange('G3').setValue(new Date()).setNumberFormat('dd-MMM-YYYY');
  spreadsheet.getRange('C2').activate();
  hideImage();
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...