每天精确定时运行Google Sheets脚本是否可行?

3

目前我使用的是My Trigger,时间驱动->每天计时器->上午7点到8点(GMT+08:00),但结果是我的脚本在上午7:11:45运行。这太早了。

我的问题是,是否有可能在每天的准确时间(例如上午7:55:00)触发Google表格?

enter image description here


1
请在这篇帖子中检查我的答案。它会为一组特定的值创建一个每日定时事件。在你的情况下,只需使用7:55。https://dev59.com/L7noa4cB1Zd3GeqPZeZS - undefined
@Marios谢谢你的回复,我尝试了一下,但是在第5行出现了错误。"语法错误。(第5行,文件“script”)"....."times.forEach(t_el => scheduledTrigger(t_el[0],t_el[1]));" - undefined
2
@user3546314 升级到v8版本 - undefined
1
@TheMaster 我同意这个重复问题。我没有将其关闭,因为他提到了一个每天定时触发器,而重复的问题是关于一次性定时触发器的。当然,我在那里的回答也涵盖了这种情况,但我认为对于这样的问题,一个专门的回答会更合适。 - undefined
1
@Marios 每天都有重复的问题。在每天的8:00、12:30和17:00运行一个Gmail Google Apps脚本 另外,不需要解释。你可以按照自己认为合适的方式去做。我相信我们有时会有意见分歧。如果你认为需要重新开放,请随意投票支持重新开放。 - undefined
1个回答

8

说明:

您需要以下四个函数:

  • setTrigger():此函数负责删除先前的触发器,并为function_Triggered创建一个新的触发器。您需要做的唯一事情就是在每天7点之前设置一个每日触发器,例如6-7am。以下功能只是辅助功能,您不需要手动执行它们。

  • scheduledTrigger(hours, minutes):此函数接受时间(小时和分钟),负责为function_Triggered创建计划触发器。

  • deleteTriggers():此函数删除所有当前触发器(在本例中仅有一个)function_Triggered.

  • function_Triggered():此函数包含您想要每天在7:55am执行的代码。


解决方案:

function setTrigger() {

deleteTriggers();  
scheduledTrigger(7,55);
}

function scheduledTrigger(hours,minutes){
  
var today_D = new Date();
var year = today_D.getFullYear();
var month = today_D.getMonth();
var day = today_D.getDate();
  
pars = [year,month,day,hours,minutes];
  
var scheduled_D = new Date(...pars);
var hours_remain=Math.abs(scheduled_D - today_D) / 36e5;
ScriptApp.newTrigger("function_Triggered")
.timeBased()
.after(hours_remain * 60 *60 * 1000)
.create()
}

function deleteTriggers() {
  
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
  if (   triggers[i].getHandlerFunction() == "function_Triggered") {
    ScriptApp.deleteTrigger(triggers[i]);
  }
}
}

function function_Triggered() {
 // your function code here
}

请启用v8运行时,否则该解决方案将无法正常工作。

相关信息:

如何每天在8:00、12:30、17:00运行Gmail Google应用脚本


谢谢,它有效了! - undefined
1
很遗憾,“工作”和“不工作”永远无法为我或你提供问题的正确细节。检查触发器失败的原因。转到项目触发器仪表板,查看触发器失败的原因。此外,你分享的文件处于查看模式,我无法看到你的代码。但即使我能看到,我的答案中的指示只适用于启用setTrigger()的触发器。触发器附加在电子邮件上,因此我无法看到为什么触发器在你的情况下失败了。在取消接受一开始帮助过你的答案之前,请先进行调查研究。祝你好运 :) @user3546314 - undefined
1
这个解决方案的目标是在您的仪表板上看到两个触发器。一个是用于函数function_Triggered的触发器,它将在选择的时间设置。另一个是由您手动创建的触发器,用于setTrigger(),它会在您想要设置其他触发器之前的每天设置。到目前为止还清楚吗?如果您按照我在回答中提到的说明,并且进入您的仪表板,您是否看到这两个触发器?如果是,请打开设置并向我发送两个显示其参数的截图。@user3546314 - undefined
是的,我真的理解你的脚本会先启用setTrigger()函数,然后在时间到达时运行第二个函数"function_Triggered()"。但在我的情况下,第二个函数没有运行,即使我等了一两个小时。然后我做的是,在触发器页面更改时间并点击保存,这样就可以工作了。我已经在Google表格中放置了屏幕截图,并且我已经打开了编辑权限。 https://docs.google.com/spreadsheets/d/1tNtGVQaLMetu4-NFq6HYf10cqG-J1iYPoiqRG7xXfw8/edit?usp=sharing - undefined
@user3546314 1. 我点击播放SetTringger,它会在19:30创建一个新的触发器,但第二个函数仍未运行 回答:第二个函数将在19:30运行,而不是您执行SetTrigger的时间。我告诉过你要阅读说明书。有两篇关于完全相同的事情的帖子,请仔细阅读并重新完成任务。 - undefined
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接