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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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 谷歌电子表格触发器_Google Apps Script - Fatal编程技术网

Google apps script 谷歌电子表格触发器

Google apps script 谷歌电子表格触发器,google-apps-script,Google Apps Script,我试图创建一个只在工作日和特定时间激活的触发器,但我不知道我做错了什么。这是我的密码 function createTriggers() { var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRI

我试图创建一个只在工作日和特定时间激活的触发器,但我不知道我做错了什么。这是我的密码

function createTriggers() {
    var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
                ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,
                ScriptApp.WeekDay.FRIDAY];

    var d = new Date();
    var time = d.toLocaleTimeString();

    if (time == '3:05:00 PM EDT') {
        for (var i = 0; i < days.length; i++) {
            ScriptApp.newTrigger(Lunch1)
            .timeBased().onWeekDay(days[i])
            .everyMinutes().create();
        }
    }
}

你应该这样做:

function createTriggers(func, hour) {
  var weekdays = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY,
               ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY,                                            
               ScriptApp.WeekDay.FRIDAY];

  for (var dayIndex in weekdays) {
    var day = weekdays[dayIndex];

    ScriptApp.newTrigger(func).timeBased()
      .onWeekDay(day).atHour(hour).create();
  }
}

这段代码在特定时间调用func函数为工作日创建一个触发器。

我猜您的意思是希望使函数在每个工作日的特定时间运行。这是我要做的

首先,在脚本编辑器中:

转到资源-当前项目的触发器

单击添加新触发器

选择要触发的功能

将下一个框更改为“时间驱动”

将下一个框更改为小时计时器

然后将最后一个框更改为每小时一次

然后在函数的开头添加以下代码:

var d = new Date(); 
if (d.getDay() == 6 || d.getDay() == 0) return;
// more info here: http://www.w3schools.com/jsref/jsref_getday.asp
如果是周六或周日,那么脚本的其余部分将停止运行

然后,假设您希望脚本仅在每个工作日的一个特定时间运行,您可以将时间驱动触发器设置为“每分钟”,然后在上述语句之后添加另一个if语句:

if (d.getHours() != 15 && d.getMinutes() != 5) return;
如果不是15:05下午3:05,那么脚本的其余部分将停止运行

这肯定不是最有效的方法,但它是有效的


另外,值得一提的是:我不确定是否有任何东西会阻止你每分钟触发脚本。谷歌确实对你的脚本设置了配额,但我没有看到任何关于一个脚本一天可以触发多少次的信息。这是图表:

我不明白你想做什么。createTriggers何时执行?在我的脚本中,我使用If语句使触发器查看每分钟,并且仅在下午3:05时激活。我正在尝试激活一个函数,在每周的某个特定时间使用触发器。我知道了,但你所做的是在特定时间创建触发器,而不是在这个时间实际触发。哦,对不起。我对写纸条真的是个新手。现在才做了几天。我没有意识到我没有触发它们,但我也希望能在半小时内触发。这就是为什么我认为您必须使用.everyMinutes并使用If语句检查每分钟。您想在半小时内每分钟执行一个函数吗?在如此精确地指定时间时,请允许自己有一点自由。谷歌服务器之间很少有时间漂移,但确实发生了。指定这样的一分钟作为+/-5OP的ramge可能更好,这是一个很好的建议。你需要精确到什么程度?我每天只需要半小时。比如每天2:30一次。如果我把它设置为每30分钟触发一次,它会检查例如1:00,1:30,2:00230…等等吗?还是从我保存脚本开始每隔30分钟检查一次?此外,我还尝试使用触发时间的最小间隔测试您建议的脚本,它似乎忽略了if语句并触发函数,而不管它是否是我设置它的时间。将此行添加到d:Logger.logHours:%s,Minutes:%s,d.getHours,d.getMinutes的变量声明行之后;然后运行脚本,完成后,转到查看日志并查看这些值。然后,您可以使用它来优化if语句。我认为,当将时间间隔设置为30分钟时,谷歌服务器只需选择一个随机时间,然后每30分钟运行一次。因此,如果当前时间不在45分钟内,您可能希望停止脚本。