Как изменить существующую защиту Google Sheet с помощью скриптов приложений? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть лист Google с именем Dashboard, который защищен вручную, за исключением ячеек A4: C4.

Теперь я хочу, чтобы в ячейке C6 было выбрано «Start 1-Period or Start 2-Period» , приборная панель будет полностью защищена, что означает, что она будет включать защиту в ячейках A4: C4.

Затем через 5 минут защита приборной панели go вернется на предыдущий уровень, то есть панель инструментов защищена, кроме A4: ячейки C4 .

Обратите внимание, что на листе панели инструментов есть пять редакторов, которые останутся без изменений. Для получения подробной информации о сценарии, пожалуйста, проверьте прикрепленное изображение.

function onEdit(e){  
  if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 1-Period") { 
    refreshSheet();
    onePeriod();  
  }
  if (e.range.getA1Notation() === 'C6' && e.range.getValue() === "Start 2-Period") {    
    refreshSheet();
    twoPeriod();  
  }   
}

function refreshSheet() {   
  //For protecting dashboard while scripts running
  var spreadsheet = SpreadsheetApp.getActive();
  var dashboard = spreadsheet.getSheetByName("Dashboard");
  
  var protectionms = dashboard.getProtections(SpreadsheetApp.ProtectionType.RANGE);
    for (var i = 0; i < protectionms.length; i++) {
      var protectionm = protectionms[i];
      if (protectionm.canEdit()) {
        protectionm.remove();
      }
    }
   var protectionm = dashboard.protect();
   var range = dashboard.getRange('A4:C4');
        
   Utilities.sleep(300000);
  
   protectionm.setUnprotectedRanges([range]);
}

введите описание изображения здесь

1 Ответ

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

Каждый раз, когда вы редактируете ячейку 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 protection = sh.protect();
       
     var selection = sh.getRange('C6').getValue();
     var range = sh.getRange('A4:C4');

    if ( selection == 'Please Select' ) {
      protection.setUnprotectedRanges([range]);
    } 
  }  
}

Вам просто нужно скопировать этот код в редактор скриптов, сохранить изменения, и тогда скрипт позаботится об этом процессе. .

Обратите внимание, что мой сценарий применяется к листу с именем Sheet1 . Измените эту часть кода, если вы работаете с другим листом.

Ссылки :

...