Google скрипты для защиты ячеек в определенное время - PullRequest
1 голос
/ 30 сентября 2019

Мне нужна помощь, чтобы написать скрипт. Вот что я хочу сделать: защитить определенные ячейки в соответствии с запрограммированным расписанием. Я могу защитить клетки в соответствии с ограничением по времени. Мне трудно менять клетки каждый день для защиты. Например, я хотел бы защитить: A1: B5 (день 1), C1: D5 (день 2), A6: B10 (день 3), C6: D10 (день 4). Я не знаю, как это сделать.

Вот скрипт, который я нашел и который хорошо работает для меня, но мне нужен другой раздел для другой ячейки.

function AddProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getRange('A1:B5');
  var protectSs = range.protect().setDescription('Protect');  
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false); 
  }
}

Кроме того, у меня нет большого опыта работы со сценариями, и мой первый язык - французский. Я надеюсь, что я был ясен в своих объяснениях.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019
 function AddProtectionToColumn() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var range = GetRange(ss);
      var protectSs = range.protect().setDescription('Protect');
      var me = Session.getEffectiveUser();
      protectSs.addEditor(me);
      protectSs.removeEditors(protectSs.getEditors());
      if (protectSs.canDomainEdit()) {
        protectSs.setDomainEdit(false); 
      }
    }

    function GetRange(ss){
      var today = new Date().getDay();
      // assuming you're only making protected ranges on the first sheet
       var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
      if (today == 0){ // sunday
        return ss.getRange('A1:B5');
      }
      else if (today == 1){ // monday
        return ss.getRange('C1:D5');
      }
      else if (today == 2){ // tuesday
        return ss.getRange('A6:B10');
      }
      else if (today == 3){ // wednesday
        return ss.getRange('C6:D10');
      }
      else if (today == 4){ // thursday
        return ss.getRange('A7:B11');
      }
      else if (today == 5){ // friday
        return ss.getRange('C7:D11');
      }
      else if (today == 6){ // saturday
        return ss.getRange('A8:B12');
      }
    }

Привет! Это финальная версия, которая работает очень хорошо! Спасибо Рафе Гильермо.

0 голосов
/ 30 сентября 2019

Вы можете создать вторую функцию, которая устанавливает желаемый диапазон в зависимости от дня недели, и вызвать эту функцию из текущей функции:

function AddProtectionToColumn() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = GetRange(ss);
  var protectSs = range.protect().setDescription('Protect');
  var me = Session.getEffectiveUser();
  protectSs.addEditor(me);
  protectSs.removeEditors(protectSs.getEditors());
  if (protectSs.canDomainEdit()) {
    protectSs.setDomainEdit(false); 
  }
}

function GetRange(ss){
  var today = new Date().getDay();
  // assuming you're only making protected ranges on the first sheet
  var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE); 
  if (today == 0){ // sunday
    //assuming you want to remove yesterday's protection
    removeProtections(protections);
    return ss.getRange('range-for-sunday');
  }
  else if (today == 1){ // monday
    removeProtections(protections);
    return ss.getRange('range-for-monday');
  }
  else if (today == 2){ // tuesday
    removeProtections(protections);
    return ss.getRange('range-for-tuesday');
  }
  else if (today == 3){ // wednesday
    removeProtections(protections);
    return ss.getRange('range-for-wednesday');
  }
  else if (today == 4){ // thursday
    removeProtections(protections);
    return ss.getRange('range-for-thursday');
  }
  else if (today == 5){ // friday
    removeProtections(protections);
    return ss.getRange('range-for-friday');
  }
  else if (today == 6){ // saturday
    removeProtections(protections);
    return ss.getRange('range-for-saturday');
  }
}

function removeProtections(protections){
  for (var i = 0; i < protections.length; i++){
    protections[i].remove();
  }
}

Функция removeProtections(), которую я добавил на всякий случай, если вы хотитечтобы снять защиту с предыдущего дня, вы можете удалить ее, если хотите сохранить ее.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...