Как написать сценарий для триггера, который будет работать каждый месяц с 25 до конца месяца - PullRequest
0 голосов
/ 23 января 2020

Мне нужно создать триггер в листах Google, который будет запускать некоторую функцию с 25 числа до последнего числа каждого месяца. Я пытался написать некоторый код, но я не уверен, что это правильно, решить мою проблему:

function triggerDate() {
 for (i=25; i<32; i++){  
 ScriptApp.newTrigger("simpleTrig")
 .timeBased()
 .onMonthDay(i)
 .create();
 }
}

1 Ответ

1 голос
/ 23 января 2020

Вы можете сделать это следующим образом.

function createMonthlyTriggers() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Triggers');
  var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
  var hdrToIdx={};
  var hdrToCol={};
  hA.forEach(function(hdr,i){hdrToIdx[hdr]=i;hdrToCol[hdr]=i+1});
  var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
  var vA=rg.getValues();
  vA.forEach(function(r,i){
    if(!isATrigger(vA[i][hdrToIdx['FunctionName']])) {
      ScriptApp.newTrigger(vA[i][hdrToIdx['FunctionName']]).timeBased().onMonthDay(vA[i][hdrToIdx['Day']]).atHour(vA[i][hdrToIdx['Hour']]).create();  
    }
  });
}

function isATrigger(funcName){
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}

Используя электронную таблицу, подобную этой:

enter image description here

И вы можете использовать подобная функция для отображения и удаления триггеров:

function displayProjectTriggers() {
  var tA=ScriptApp.getProjectTriggers();
  var html="<style>th,td{border:1px solid black;padding:2px;margin:2px;}</style><table><tr><th>Handler Function</th><th>Trigger Type</th><th>Unique ID</th><td>&nbsp;</td></tr>";
  for(var i=0;i<tA.length;i++) {
    html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td><input type="button" value="Delete" onClick="google.script.run.withSuccessHandler(function(){google.script.run.displayProjectTriggers();}).deleteTrigger(\'%s\');" /></td></tr>',tA[i].getHandlerFunction(),tA[i].getEventType(),tA[i].getUniqueId(),tA[i].getHandlerFunction());
  }
  html+='</table><br /><input type="button" value="Close" onClick="google.script.host.close();" />';
  var userInterface=HtmlService.createHtmlOutput(html).setWidth(800);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Project Triggers');
}

Вот функция deleteTrigger:

function deleteTrigger(triggerName){
  var triggers=ScriptApp.getProjectTriggers();
  for (var i=0;i<triggers.length;i++){
    if (triggerName==triggers[i].getHandlerFunction()){
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...