我有一个函数(见下文),它根据基于 GoogleClock() 函数计算的工作表中包含的时间以编程方式删除然后重置 3 个触发器,并且每天自动递增到下一个工作日(使用 WORKDAY( ) ) 函数和包含所有假期的范围。它设置的三个触发器之一是在下一个工作日结束时再次运行自身的触发器,其中流程重新启动。
这大约有 60% 的时间有效,其余时间都失败了。据我所知,没有生成错误电子邮件。
函数如下。while 循环旨在确保在脚本运行时电子表格值不在 GoogleClock() 重新计算中,这是我最初怀疑它失败的原因。有什么建议么?
function setCustomRunTriggers() {
Utilities.sleep(5000);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PushedSchoolHolidays");
var nextMidnight = sheet.getRange('D3').getValue();
var nextSeven = sheet.getRange('D4').getValue();
var nextSevenOFive = sheet.getRange('D5').getValue();
var type = getType(nextMidnight);
while (type!="Object") {
nextMidnight = sheet.getRange('D3').getValue();
nextSeven = sheet.getRange('D4').getValue();
nextSevenOFive = sheet.getRange('D5').getValue();
type = getType(nextMidnight);
}
var triggers = ScriptApp.getScriptTriggers();
for (var i = 0; i<triggers.length; i++) {
var eventType = triggers[i].getEventType();
var triggerSource = triggers[i].getTriggerSource();
var handlerFunction = triggers[i].getHandlerFunction();
if ((handlerFunction=='functionA')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
if ((handlerFunction=='functionB')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
if ((handlerFunction=='setCustomRunTriggers')&&(eventType=="CLOCK")&&(triggerSource=="CLOCK")) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
ScriptApp.newTrigger('functionA').timeBased().at(nextMidnight).create();
ScriptApp.newTrigger('functionB').timeBased().at(nextSeven).create();
ScriptApp.newTrigger('setCustomRunTriggers').timeBased().at(nextSevenOFive).create();
}