Google скрипт запускается на определенную дату (более одной даты) - PullRequest
1 голос
/ 01 октября 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().getDate();
  // assuming you're only making protected ranges on the first sheet
   var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);
  if (at date == ('october 01, 2019')){ 
    return ss.getRange('A1:B5');

  if (at date == ('october 02, 2019')){ 
    return ss.getRange('C1:D5');
  }
}

Часть скрипта (защита) работает хорошо. У меня проблемы с настройкой даты. Я пытаюсь что-то, и это не сработало. У вас есть решение для этого? Кроме того, у меня нет большого опыта в написании сценариев, и мой первый язык - французский. Спасибо!!

1 Ответ

0 голосов
/ 01 октября 2019

Ответ:

Вы можете использовать метод getDate(), чтобы получить номер текущей даты и использовать условный код, аналогичный вашему текущему коду.

Кодпример:

function GetRange(ss){

  var today = new Date().getDate();
  var protections = ss.getSheets()[0].getProtections(SpreadsheetApp.ProtectionType.RANGE);

  if (today == 1){ 
    return ss.getRange("day-1-range");
  }
  else if (today == 2){ 
    return ss.getRange("day-2-range");
  }
  else if (today == 3){
    return ss.getRange("day-3-range");
  }
  // else block continues...
  else if (today == 31){
    return ss.getRange("day-31-range");
  }
}

Честно говоря, я не очень рекомендую это, поскольку у вас будет очень большой блок if, но для вашего варианта использования это будет работать.

Объяснение:

Метод getDate() возвращает число , равное числовой дате дня объекта даты .

Например:

var date1 = new Date('01 October 2019').getDate(); // == 1
var date2 = new Date('21/12/1984').getDate(); // == 21
var date3 = new Date('Jan 14 2000').getDate(); // == 14
var date4 = new Date('29 February 2004').getDate(); // == 29
...