Процесс, который вы описываете, можно разбить на две части:
Вам явно нужна функция триггера onEdit , которая изменит статус защиты ячеек A4: C4 согласно C1 .
Вы можете контролировать значение C1 согласно вашим запущенным скриптам. Например, когда ваш скрипт запущен, установите значение C1 на Start 1-Period или Start 2-Period . Прежде чем запускаемый скрипт будет завершен, вы можете установить значение C1 обратно на Пожалуйста, выберите .
Таким образом, процесс 1. будет отвечать за обновление статуса защиты, как только C1 будет отредактирован, а процесс 2. будет отвечать за выбор значения C1 в соответствии с запущенными скриптами.
Объяснение сценария onEdit:
Каждый раз, когда вы редактируете ячейку C6 , вы применяете правила защиты к диапазону A4: C4 в соответствии с к выбранному значению. Более подробно, каждый раз, когда вы редактируете ячейку C6 , скрипт сначала удаляет все текущие защиты. Если выбранное значение ячейки C6 изменяется на Выберите , то защита не применяется. В противном случае, если новое значение C6 равно Start 1-Period или Start 2-Period , вы применяете защиту к диапазону: A4: C4 .
Вот полное решение:
function onEdit(e) {
var sh_name = "Sheet1";
var sh = e.source.getSheetByName(sh_name)
var row = e.range.getRow();
var col = e.range.getColumn();
if ( e.source.getActiveSheet().getName() == sh_name && row==6 && col==3 ){
var protections = sh.getProtections(SpreadsheetApp.ProtectionType.RANGE);
for (var i = 0; i < protections.length; i++) {
var protection = protections[i];
if (protection.canEdit()) {
protection.remove();
}
}
var selection = sh.getRange('C6').getValue();
var range = sh.getRange('A4:C4');
if ( selection == 'Start 1-Period' || selection == 'Start 2-Period' ) {
var protection = range.protect();} }
}
Вам просто нужно скопировать этот код в редактор скриптов, сохранить изменения, и тогда скрипт позаботится об этом процессе. .
Обратите внимание, что мой сценарий применяется к листу с именем Sheet1 . Измените эту часть кода, если вы работаете с другим листом.
Ссылки :