Вам потребуются следующие компоненты:
- триггер onEdit
- Проверка того, какой флажок был отредактирован, и подключение к соответствующему листу
- Получить редактор из строки с флажком
- Убедитесь, что флажок установлен или не установлен
Ниже приведен образец, обеспечивающий эту функциональность:
function onEdit(e){
var ss = SpreadsheetApp.getActive();
//change name of the sheet if necessary!
var sheetWithCheckBoxes = ss.getSheetByName("Sheet1");
var column = e.range.getColumn();
if (e.range.getSheet().getName() == sheetWithCheckBoxes.getName() && (column == 3 || column == 4 || column == 5)) {
Logger.log("if");
var spreadsheet2 = SpreadsheetApp.openById("XXX");
var sheet;
switch (column){
case 3:
sheet = ss.getSheetByName("name");
break;
case 4:
sheet = ss.getSheetByName("name2");
break;
case 5:
sheet = spreadsheet2.getSheetByName("name3");
break;
}
var protection = sheet.protect();
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
var editor = sheetWithCheckBoxes.getRange(e.range.getRow(), 2).getValue();
Logger.log(e.value);
if(e.value == "TRUE"){
Logger.log("true");
protection.addEditor(editor);
}
if(e.value == "FALSE"){
Logger.log("false");
protection.removeEditor(editor);
}
}
}
Примечание: В этом примере первые два листа находятся в той же электронной таблице, что и лист с флажками, а третья таблица находится в другой электронной таблице.
Пожалуйста, адаптируйте листы и таблицы в соответствии с вашими потребностями.
ОБНОВЛЕНИЕ
Для настройки не только защиты листа, но и предоставления доступа к электронной таблице новым пользователям необходимо использовать метод DriveApp.getFileById (id) .addEditor (editor) .
Однако DriveApp.getFileById(id)
- это вызов, который не может быть запущен простым триггером onEdit из-за ограничений .
Решение:
Свяжите и триггер , устанавливаемый onEdit, к вашей функции вместо простого. Обязательно переименуйте функцию заранее, чтобы избежать конфликтов из-за одновременного срабатывания простого и устанавливаемого триггера.
Пример настройки разрешений для электронной таблицы и листа:
function Edit(e){
var ss = SpreadsheetApp.getActive();
//change name of the sheet if necessary!
var sheetWithCheckBoxes = ss.getSheetByName("Sheet1");
var column = e.range.getColumn();
if (e.range.getSheet().getName() == sheetWithCheckBoxes.getName() && (column == 3 || column == 4 || column == 5)) {
var spreadsheet2 = SpreadsheetApp.openById("XXX");
var sheet;
var id;
switch (column){
case 3:
sheet = ss.getSheetByName("name");
id = ss.getId();
break;
case 4:
sheet = ss.getSheetByName("name2");
id = ss.getId();
break;
case 5:
id = spreadsheet2.getId();
sheet = spreadsheet2.getSheetByName("name3");
break;
}
var protection = sheet.protect();
if (protection.canDomainEdit()) {
protection.setDomainEdit(false);
}
var editor = sheetWithCheckBoxes.getRange(e.range.getRow(), 2).getValue();
Logger.log(e.value);
if(e.value == "TRUE"){
DriveApp.getFileById(id).addEditor(editor);
protection.addEditor(editor);
}
if(e.value == "FALSE"){
protection.removeEditor(editor);
}
}
}