基于时间的触发器多次激活

问题描述 投票:0回答:1

我创建了一个触发器,每个工作日晚上 8 点左右运行一个函数,但我不小心运行了该触发器多次,因此该函数被激活了 3 次而不是一次。我该如何解决这个问题?

这是我的函数代码和下面的触发器:

function take1() {
var startDate = new Date();
startDate.setDate(startDate.getDate());
var dateString = Utilities.formatDate(startDate, "GMT-6", "MM/dd/YY");
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Form Responses 1'), true);
spreadsheet.duplicateActiveSheet();
spreadsheet.getActiveSheet().setName(dateString);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Form Responses 1'), true);
spreadsheet.getRange('2:40').activate();
spreadsheet.getActiveSheet().deleteRows(spreadsheet.getActiveRange().getRow(),         spreadsheet.getActiveRange().getNumRows());
spreadsheet.getRange('C12').activate();
spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveSheet().getMaxRows(), 40);
};

function createTriggers() {
var days = \[ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,  
ScriptApp.WeekDay.FRIDAY\];
for (var i=0; i\<days.length; i++) {
ScriptApp.newTrigger("take1")
.timeBased().onWeekDay(days\[i\])
.atHour(20).create();
}
}

我发现了一些应该删除触发器的代码,但我不确定如何使其特别适合我的代码:

function deleteTimers() {
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    if (triggers[i].getEventType() == ScriptApp.EventType.CLOCK) {
      ScriptApp.deleteTrigger(allTriggers[i]);
    }
  }
} 
google-sheets google-apps-script triggers
1个回答
0
投票
function take1(e) {
  if (e.day-of-week < 6) {
    //put your function here
  };
}

function createTriggers() {
  ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "take1").forEach(t => ScriptApp.deleteTrigger(t));
  ScriptApp.newTrigger("take1").timeBased().everyDays(1).atHour(20).create();
}
© www.soinside.com 2019 - 2024. All rights reserved.