基于时间的Google脚本 - 每分钟凌晨12:00至12:30触发

时间:2016-10-06 05:39:39

标签: google-apps-script

我有一个脚本可以将数据从一张google工作表复制到另一张,代码如下:

function copy() {
 var sss = SpreadsheetApp.openById('ID'); //replace with source ID
 var ss = sss.getSheetByName('Cap'); //replace with source Sheet tab name
 var range = ss.getRange('A:F'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('ID'); //replace with destination ID
 var ts = tss.getSheetByName('Cap'); //replace with destination Sheet tab name
 ts.getRange(1, 1, data.length, data[0].length).setValues(data);
}

我需要每天凌晨12:00运行这个脚本,直到凌晨12:30每分钟运行一次,我不需要它在当天运行

我可以设置触发器,例如白天(在12点到凌晨1点之间运行)或小时时间点(每小时)但这不是我需要的,这不准确,我只需要在凌晨12:00运行,依此类推每分钟解释30分钟

如果我将触发器设置为每分钟运行一次"服务使用太多计算机时间一天"

有没有办法在脚本触发器上设置它?

谢谢!

2 个答案:

答案 0 :(得分:1)

Google会限制您使用触发器的频率。您不能为每分钟设置一堆触发器,因为每个用户限制为20个(更多关于配额here)。据我所知,这是针对并发触发器的。每日重复的触发器每小时只会随机发射一次。

您可能想尝试创建触发器programmatically。您将设置一个初始触发器,该触发器将在特定的日期和时间触发脚本。

该脚本必须有一个额外的功能,可以检查它是什么时间,并相应地删除前一个触发器,创建一个12:01然后12:02然后12:03的触发器,依此类推,直到它检查到创建的触发器是在12:30,此时它创建的下一个触发器是第二天的12:00。

这里的关键问题是绝对肯定你的脚本永远不会超过1分钟执行,并且它肯定会及时开始。您也可以尝试让它使用重复每分钟触发器,但同样适用 - 您的脚本无法运行超过1分钟,否则您将在下次触发时遇到问题。

至于删除旧触发器,您可以轻松地执行以下操作:

function(trig) {
  var triggers;
  var trigCount;

  triggers = ScriptApp.getProjectTriggers();
  for (trigCount = 0; trigCount<triggers.length; trigCount++) {
      if (triggers[trigCount].getUniqueId() == trig.triggerUid) {
        ScriptApp.deleteTrigger(triggers[trigCount]);
        break;
      }
  }
}

这将删除启动脚本的任何触发器。

答案 1 :(得分:1)

FYI

如果有人需要相同的话,我找到了解决方案

代码是

function CopyLive1() {

  var date = new Date();  
  var day = date.getDay();
  var hrs = date.getHours();
  var min = date.getMinutes();
  if ((hrs >= 0) && (hrs <= 0) && (min >= 0) && (min <= 30 )) {

 var sss = SpreadsheetApp.openById('ID'); //replace with source ID
 var ss = sss.getSheetByName('L1'); //replace with source Sheet tab name
 var range = ss.getRange('A:E'); //assign the range you want to copy
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('ID'); //replace with destination ID
 var ts = tss.getSheetByName('L1'); //replace with destination Sheet tab name
 ts.getRange(1, 1, data.length, data[0].length).setValues(data);

  }

} 

只需添加每分钟触发器,这种方式只会在凌晨12:00到12:30之间每分钟运行一次