Google apps script 谷歌电子表格触发器
我试图创建一个只在工作日和特定时间激活的触发器,但我不知道我做错了什么。这是我的密码Google apps script 谷歌电子表格触发器,google-apps-script,Google Apps Script,我试图创建一个只在工作日和特定时间激活的触发器,但我不知道我做错了什么。这是我的密码 function createTriggers() { var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRI
function createTriggers() {
var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,
ScriptApp.WeekDay.FRIDAY];
var d = new Date();
var time = d.toLocaleTimeString();
if (time == '3:05:00 PM EDT') {
for (var i = 0; i < days.length; i++) {
ScriptApp.newTrigger(Lunch1)
.timeBased().onWeekDay(days[i])
.everyMinutes().create();
}
}
}
你应该这样做:
function createTriggers(func, hour) {
var weekdays = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,
ScriptApp.WeekDay.FRIDAY];
for (var dayIndex in weekdays) {
var day = weekdays[dayIndex];
ScriptApp.newTrigger(func).timeBased()
.onWeekDay(day).atHour(hour).create();
}
}
这段代码在特定时间调用func函数为工作日创建一个触发器。我猜您的意思是希望使函数在每个工作日的特定时间运行。这是我要做的 首先,在脚本编辑器中: 转到资源-当前项目的触发器 单击添加新触发器 选择要触发的功能 将下一个框更改为“时间驱动” 将下一个框更改为小时计时器 然后将最后一个框更改为每小时一次 然后在函数的开头添加以下代码:
var d = new Date();
if (d.getDay() == 6 || d.getDay() == 0) return;
// more info here: http://www.w3schools.com/jsref/jsref_getday.asp
如果是周六或周日,那么脚本的其余部分将停止运行
然后,假设您希望脚本仅在每个工作日的一个特定时间运行,您可以将时间驱动触发器设置为“每分钟”,然后在上述语句之后添加另一个if语句:
if (d.getHours() != 15 && d.getMinutes() != 5) return;
如果不是15:05下午3:05,那么脚本的其余部分将停止运行
这肯定不是最有效的方法,但它是有效的
另外,值得一提的是:我不确定是否有任何东西会阻止你每分钟触发脚本。谷歌确实对你的脚本设置了配额,但我没有看到任何关于一个脚本一天可以触发多少次的信息。这是图表:我不明白你想做什么。createTriggers何时执行?在我的脚本中,我使用If语句使触发器查看每分钟,并且仅在下午3:05时激活。我正在尝试激活一个函数,在每周的某个特定时间使用触发器。我知道了,但你所做的是在特定时间创建触发器,而不是在这个时间实际触发。哦,对不起。我对写纸条真的是个新手。现在才做了几天。我没有意识到我没有触发它们,但我也希望能在半小时内触发。这就是为什么我认为您必须使用.everyMinutes并使用If语句检查每分钟。您想在半小时内每分钟执行一个函数吗?在如此精确地指定时间时,请允许自己有一点自由。谷歌服务器之间很少有时间漂移,但确实发生了。指定这样的一分钟作为+/-5OP的ramge可能更好,这是一个很好的建议。你需要精确到什么程度?我每天只需要半小时。比如每天2:30一次。如果我把它设置为每30分钟触发一次,它会检查例如1:00,1:30,2:00230…等等吗?还是从我保存脚本开始每隔30分钟检查一次?此外,我还尝试使用触发时间的最小间隔测试您建议的脚本,它似乎忽略了if语句并触发函数,而不管它是否是我设置它的时间。将此行添加到d:Logger.logHours:%s,Minutes:%s,d.getHours,d.getMinutes的变量声明行之后;然后运行脚本,完成后,转到查看日志并查看这些值。然后,您可以使用它来优化if语句。我认为,当将时间间隔设置为30分钟时,谷歌服务器只需选择一个随机时间,然后每30分钟运行一次。因此,如果当前时间不在45分钟内,您可能希望停止脚本。