Google apps script 在没有用户交互的情况下,如何设置在特定时间启动的2个时间控制触发器?
描述如何每天设置两个不同的时间触发器,执行两个功能 因此,函数createDayTrigger将创建两个时间触发器,如下所示 流量: 一,。触发器1在00:00:00将当前时间戳写入单元格A2 二,。触发器2在22:00:00将当前时间戳写入单元格A3 三,。第二天,同样的游戏Google apps script 在没有用户交互的情况下,如何设置在特定时间启动的2个时间控制触发器?,google-apps-script,Google Apps Script,描述如何每天设置两个不同的时间触发器,执行两个功能 因此,函数createDayTrigger将创建两个时间触发器,如下所示 流量: 一,。触发器1在00:00:00将当前时间戳写入单元格A2 二,。触发器2在22:00:00将当前时间戳写入单元格A3 三,。第二天,同样的游戏 function TimeTrigger1() { deleteTrigger(TimeTrigger1); //This will write the current timestamp into cel
function TimeTrigger1() {
deleteTrigger(TimeTrigger1);
//This will write the current timestamp into cell A2
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
}
// This will delete TimeTrigger1 after the function has been executed
function deleteTrigger(TimeTrigger1) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() == TimeTrigger1) ScriptApp.deleteTrigger(t);
});
}
function TimeTrigger2() {
deleteTrigger(TimeTrigger2);
// This will write the current timestamp into cell A3
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A3').setValue(new Date());
}
// This will delete TimeTrigger2 after the function has been executed
function deleteTrigger(TimeTrigger2) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(t) {
if (t.getHandlerFunction() == TimeTrigger2) ScriptApp.deleteTrigger(t);
});
}
// This will start TimeTrigger1 and TimeTrigger2
function createDayTrigger() {
// For TimeTrigger1 this will set the date to the current date + 1 Day and the time to 00:00:00
var d1 = new Date();
d1.setDate(d1.getDate()+ 1);
d1.setHours(0);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
// For TimeTrigger2 this will set the date to the current date + 1 Day and the time to 22:00:00
var d2 = new Date();
d2.setDate(d2.getDate()+ 1);
d2.setHours(22);
d2.setMinutes(0);
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
// This function has to be started once to get "createDayTrigger()" started.
function startScript() {
ScriptApp.newTrigger('createDayTrigger').timeBased().everyDays(1).atHour(22).create();
}
作为几种方法之一,如果您想每天使用一个触发器,那么下面修改的脚本如何 在此修改中,流程如下所示
function createDayTrigger() {
var d1 = new Date();
d1.setDate(d1.getDate() + 1); // <--- Added
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
流量:
createDayTrigger设置为在21:00附近运行的everyDays的触发器。
startScript功能只需运行一次。运行此功能后,时间驱动触发器将自动运行。
运行createDayTrigger时,TimeTrigger1和TimeTrigger2的函数被设置为在22:00和00:01运行的触发器。
运行TimeTrigger1时,TimeTrigger的功能运行,TimeTrigger1的触发器被清除。
运行TimeTrigger2时,TimeTrigger的功能运行,TimeTrigger2的触发器被清除。
通过此循环,TimeTrigger 1和TimeTrigger 2可在22:00和00:01运行TimeTrigger功能
修改脚本:
注:
如果要将触发器设置为00:01,则在本例中为d2.setDated2.getDate+1;需要添加。因为当触发器被设置时,00:01是明天。
编辑1:
从您的回复意见和更新的问题中,我可以理解您希望将触发时间设置为当天的00:00和22:00。在上面的答案中,第一个触发器和第二个触发器分别是今天的22:00和明天的00:00。但是,使用createDayTrigger安装的触发器将继续此循环。这样,在下一个循环之后,将触发当天的00:00和22:00。但这似乎没有用。所以我提出了修改后的脚本。请修改我的上述脚本如下
function createDayTrigger() {
var d1 = new Date();
d1.setDate(d1.getDate() + 1); // <--- Added
d1.setHours(22);
d1.setMinutes(0);
d1.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger1').timeBased().at(d1).create();
var d2 = new Date();
d2.setDate(d2.getDate() + 1);
d2.setHours(0);
d2.setMinutes(1); // Do you want to run at "00:01"?
d2.setSeconds(0);
ScriptApp.newTrigger('TimeTrigger2').timeBased().at(d2).create();
}
当TimeTrigger1在2019-10-10的22:00运行时,22:00:00、22:00:00、23:59:59被放入Tickerprüfung表A2:A4的单元格中
这是当前脚本的流程,反映了我在您的问题中的修改
在您的问题中,您希望在当天的22:00和00:00实现TimeTrigger1和TimeTrigger2的功能。关于这一点,我可以确认我的理解是正确的。我认为这是可以实现的。您希望在22:00和00:00运行TimeTrigger功能。22:00的触发器是在21:00附近创建的。00:00的触发器是在23:00附近创建的。从你的问题和剧本中,我可以这样理解。如果我的理解是正确的,我认为TimeTrigger可以在22:00和00:00运行。正确。你认为上面的代码行吗?我认为行。但我建议在您的环境中测试它。我今天会做,我会告诉您它是否有效。再次感谢您的帮助!:-我从你的脚本中提出了一个修改的脚本。你能确认一下吗?我找到了一个修改点。如果要将触发器设置为00:01,则在本例中为d2.setDated2.getDate+1;需要添加。因为当触发器被设置时,00:01是明天。如果这不是你想要的结果,我很抱歉。脚本应该是第一次在今天开始,比如说2019年10月2日。00:00是否适用于此操作或更好的00:01?那么脚本应该在2019年10月2日的同一天22:00开始。@Dennis Peiter它假设今天是2019年10月2日。在上面的脚本中,当createDayTrigger在2019年10月2日的21:00附近运行时,22:00和00:00的触发器分别设置为2019年10月2日的22:00和2019年11月2日的00:00。在脚本中,当createDayTrigger2在2019年10月2日23:00附近运行时,00:00的触发器设置为2019年10月2日的00:00。到目前为止,2019年10月2日的00:00由于过去的原因不起作用。在上面修改的脚本中,00:00和00:01的值都用作2019年11月2日。因此,您可以使用所需的值。你好,Tanaike,经过几次测试后,我注意到脚本无法正常工作。例如,我昨天在07:00启动了脚本函数startScript。大约22:00时,创建了3个时间戳。时间戳1单元格A2:07.10.2019 22:05:00,时间戳2单元格A3:07.10.2019 22:00:00,时间戳3单元格A4:07.10.2019 23:59:59。今天00:01:23创建了下一个时间戳。时间戳1单元格A2:08.10.2019 22:05:00,时间戳2单元格A3:08.10.2019 22:00:00,时间戳3单元格A4:08.10.2019 23:59:59。但是,我每天都需要这个订单:第一个时间戳今天的日期,从00:00:00单元格A2:当前日期+当前时间,第二个时间戳今天的日期,在22:00:00单元格A3:当前日期+22:00:00和单元格A4:当前日期+23:59:59。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
sheet.getRange('A2').setValue(new Date());
var date = new Date();
date.setHours(22);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
sheet.getRange('A3').setValue(date);
var date1 = new Date();
date1.setHours(23);
date1.setMinutes(59);
date1.setSeconds(59);
date1.setMilliseconds(00);
sheet.getRange('A4').setValue(date1);