Добавьте этот код в редактор сценариев вашей электронной таблицы и установите триггер 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();
}
}
}
}
}