Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在没有用户交互的情况下,如何设置在特定时间启动的2个时间控制触发器?_Google Apps Script - Fatal编程技术网

Google apps script 在没有用户交互的情况下,如何设置在特定时间启动的2个时间控制触发器?

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

描述如何每天设置两个不同的时间触发器,执行两个功能

因此,函数createDayTrigger将创建两个时间触发器,如下所示

流量:

一,。触发器1在00:00:00将当前时间戳写入单元格A2

二,。触发器2在22:00:00将当前时间戳写入单元格A3

三,。第二天,同样的游戏

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);