如何在谷歌应用程序脚本中制作正确的定时触发器,请检查我的代码行



我对GAS很陌生。已经创建的脚本(第3段(我需要它每天运行,每3个小时运行一次,在0:30->3:30->6:30->9:30->12:30->15:30->18:30->21:30

这是代码的上部。不能"组合";将3个以下代码合并为一个

function createOpenTrigger() {
ScriptApp.newTrigger("#what should I input here or leave blank????")
.forSpreadsheet(SpreadsheetApp.getActive())
.onOpen()
.create();
}
function createTimeTriggerAtSpecificHourMinute() {
ScriptApp.newTrigger("what should I input here or leave blank????")
.timeBased(00:00)
.everyHour(3)
.nearMinute(30)
.everyDays(1)
.inTimezone("Asia/Tokyo")
.create();
}

function takeSnapShot() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const mainSheet = ss.getSheetByName('SOURCE');
const snap = mainSheet.getRange("A1:Q26").getDisplayValues();
....

如果我正确理解您的问题,您希望将takeSnapShot()函数安排为从00:30开始每三个小时运行一次。

使用您提供的示例代码,您可以用以下内容替换createOpenTrigger()createTimeTriggerAtSpecificHourMinute()函数。

function setFirstCall(){
ScriptApp.newTrigger('setRecurrence')
.timeBased()
.atHour(0)
.nearMinute(30)
.inTimezone('Asia/Tokyo')
.create();
}

这将触发第二天00:30附近的一次性呼叫。运行后,触发器将删除自身,但会安排函数setRecurrence()运行。所以接下来你需要创建一个循环函数。

function setRecurrence(){
ScriptApp.newTrigger('takeSnapShot')
.timeBased()
.everyHours(3)
.create();
}

GAS不允许在"精确"的一分钟内进行调度(精度为+/-15分钟(,但重复应该在同一分钟内,即如果第一个触发器在第27分钟内运行,那么之后的每次迭代都应该在第27分钟内。

希望这能有所帮助。


参考文献:

  • TriggerBuilder.timeBased((
  • 时钟触发器生成器

最新更新