Как отключить определенные ячейки или исправить значения в этих ячейках на основе ввода пользователя в другую ячейку? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть четыре ячейки ввода - A4, B4, C4 и C6.

Когда пользователь выберет «Start 1-Period» или «Start 2-Period» в ячейке C6, это означает, что определенные сценарии будут отстает, то мне нужно отключить ячейки или исправить значения этих ячеек в A4, B4, C4. Вы можете сказать, что это «Не редактируется».

Когда скрипты перестанут работать, в ячейке C6 он автоматически вернется к опции «Пожалуйста, выберите», тогда ячейки A4, B4, C4 должны быть редактируемыми.

Проверьте прикрепленное изображение. Goo

1 Ответ

1 голос
/ 04 августа 2020

Процесс, который вы описываете, можно разбить на две части:

  1. Вам явно нужна функция триггера onEdit , которая изменит статус защиты ячеек A4: C4 согласно C1 .

  2. Вы можете контролировать значение 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 . Измените эту часть кода, если вы работаете с другим листом.

Ссылки :

...