【发布时间】:2019-11-21 20:13:42
【问题描述】:
我有一个脚本,它为从主工作表中提取的一组数据运行一个函数。每次该函数运行时,它都会根据工作表中单元格(单元格 A3)中指定的日期绘制和处理数据集。此单元格中的日期通过我指定的日期范围的“for”循环更新。在我在第 6 次运行期间的某个时间遇到“超过最大执行时间”之前,该脚本可以执行这些循环的 5 次完整运行(也就是每次运行执行该函数以获得一天的数据)。每次运行后,我的所有数据都已经以持续更新的方式保存到电子表格中,所以在五个周期后我必须做的是通过修改我的脚本从第 6 天开始手动重新启动运行另外 5 天。我正在阅读有关time driven trigger 的信息,其中有人每 5 分钟暂停一次脚本以绕过 6 分钟的执行时间限制,但它不适合我的需要,因为我希望每 5 个周期后休息一下(不是基于时间)。我需要编写一个脚本,在运行 5 个周期后,脚本可以中断,然后再继续运行 5 个周期。这是我的代码的样子:
function runMultipleDates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var start = new Date("2018-11-05");
var end = new Date("2018-11-09");
var step = 1;
for (var date1 = start; date1 <= end; date1.setDate(date1.getDate() + step)) {
var date2 = new Date(date1.getTime());
date2.setDate(date2.getDate() + 1);
ss.getSheetByName('Time Range').getRange("A3").setValue(date2);
runEverything();
};
}
如您所见,现在我正在手动调整开始和结束日期 5 天,让它运行,然后通过将我的脚本开始日期调整为 2018-11-09 并将结束日期重新启动为2018-11-13 下一次运行。此功能本身可以运行超过 5 天的周期而不受执行时间限制。所以问题是在上述脚本的5个周期后是否可以暂停脚本并恢复运行。非常感谢任何帮助。
【问题讨论】:
-
您可以使用基于时间的触发器每 5 或 10 分钟运行一次,并将下一个日期保存在 PropertiesService 中,然后让 start 从 PropertiesService 中获取它的值,并让它一次运行 5 天。您可能遇到的唯一其他限制是一天的总脚本时间。您也可以使用 setTimeout() 和/或 setInterval() 从客户端(即浏览器)运行它。
-
我在一篇文章中分享了方法,您可以根据自己的要求进行修改 - script.gs/bypass-script-execution-timeout-programmatically
-
@Cooper,感谢您的想法。在我遇到 BenCollins 的帖子之前,我不知道如何执行您的建议。一天的总脚本时间看起来像 90 分钟,对吗?关于使用 setTimeout() 或 setInterval()“从客户端运行”,你有什么例子吗?我只是进入这个所以请原谅我的无知
-
@Sourabh,感谢您分享这篇文章。我去看看。
标签: javascript google-apps-script google-sheets execution-time