【问题标题】:Time based Google Script - Trigger between 12:00am to 12:30am every minute基于时间的 Google 脚本 - 每分钟在上午 12:00 到 12:30 之间触发
【发布时间】:2016-10-06 05:39:38
【问题描述】:

我有一个脚本可以将数据从一个谷歌表复制到另一个,代码是这样的:

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分钟

如果我将触发器设置为每分钟运行一次,我会得到“一天服务使用过多计算机时间”

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

谢谢!

【问题讨论】:

  • 不可能,文档将时钟触发器吹捧为类似于 cron 作业,但它们不支持允许此类行为的 cron 样式调度字符串...

标签: google-apps-script


【解决方案1】:

仅供参考

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

代码是

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 之间每分钟运行一次

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      相关资源
      最近更新 更多