我希望我的独立网络应用程序脚本每天14:00到15:00 GMT +4:30(亚洲/德黑兰)运行。它应该打开一个电子表格并检查某个单元格。
到目前为止,我有以下内容:
function addTrigger() {
var ssid = "My SpreadSheet ID";
var ss = SpreadsheetApp.openById(ssid);
var everyDay = ScriptApp.newTrigger("checkExitTime")
在此阶段,forSpreadSheet(String key)和timeBased()都显示在可用方法列表中。但当我链接一个,另一个变得不可用。因此,如果我使用forSpreadSheet方法,timeBased()方法就会消失,显示的唯一方法是create()onChange(),onEdit(),onOpen()和onFormSubmit()。我怎么能同时拥有这两个?
我希望有类似的东西:
var everyDay = ScriptApp.newTrigger("checkExitTime")
.timeBased().everyDays(1).atHour(14).inTimezone("Asia/Tehran")
.forSpreadSheet(ss)
.create()
答案 0 :(得分:0)
ScriptApp.newTrigger
返回一个TriggerBuilder类,它进一步将触发器分类为不同类型的触发器。因此,当您调用ScriptApp.newTrigger("yourFn").timeBaesd()
时,将返回一个ClockTriggerBuilder类,其方法将返回相同的ClockTriggerBuilder类进行方法链接,但您将保留在该类中。
要访问其他类型的触发器,在您的情况下.forSpreadSheet(ss)
将返回SpreadsheetTriggerBuilder类,其构建器方法将返回相同的方法链类。
在您的代码中:
var everyDay = ScriptApp.newTrigger("checkExitTime")
.timeBased().everyDays(1).atHour(14).inTimezone("Asia/Tehran")
.forSpreadSheet(ss)
.create();
使用.forSpreadSheet
是不必要的,没有任何意义,因为你不能链接这两个方法,因为它们在返回的对象中不可用。
我认为你想要做的是在基于时间的触发器运行时操纵电子表格;所以你应该创建一个时间驱动的触发器,并在其处理函数中执行任务:
var everyDay = ScriptApp.newTrigger("checkExitTime")
.timeBased().everyDays(1).atHour(14).inTimezone("Asia/Tehran")
.create();
//// Handler function of time driven trigger
function checkExitTime(e){
var ssid = "My SpreadSheet ID";
var ss = SpreadsheetApp.openById(ssid);
//// do your task
}
但是,如果您还需要onOpen()
,onEdit()
等电子表格触发器,则必须像"this"一样单独启动它们。
// Creates an edit trigger for a spreadsheet identified by ID.
var ssid = "My SpreadSheet ID";
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ssid)
.onEdit()
.create();
// your onEdit event handler
function myFunction(event){
// your code..
}
将在您的电子表格中发生编辑事件时执行myFunction
。