Вы можете сделать это следующим образом.
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;
}
Используя электронную таблицу, подобную этой:
И вы можете использовать подобная функция для отображения и удаления триггеров:
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> </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]);
}
}
}