Google脚本超过了最大执行时间&/Google Cal脚本 [英] Google Script "Exceeded Maximum Execution Time" / Google Cal Script

查看:18
本文介绍了Google脚本超过了最大执行时间&/Google Cal脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,基于大量的互联网调查,我设法拼凑出了一个使用谷歌工作表创建全天日历条目的脚本。我想要为大约450行内容创建事件,但每次我运行该脚本时,它永远不会到达结尾,它也不会创建EventID(以处理重复项),相反,它会给我一个"Expered Maximum Execution Time"错误。

    $ function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};

function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 0;  // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "evsck12.com_fp4p25esvij964uhmfs51o9ar8@group.calendar.google.com";
var cal = CalendarApp.getCalendarById(calId);
for (i in data) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]);  // First column
var title = row[1];           // Second column
var id = row[3];              // Sixth column == eventId
// Check if event already exists, update it if it does
try {
  var event = cal.getEventSeriesById(id);
}
catch (e) {
  // do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
  var newEvent = cal.createAllDayEvent(title, date).getId();
  row[3] = newEvent;  // Update the data array with event ID
}
else {
  event.setTitle(title);
range.setValues(data);
}
debugger;
}


}

我的问题如下:

  • 如何避免此错误?如果我将数据拆分成几张工作表,行吗?
  • 无论如何我都不能让EventID部分填充...我设法在试卷上做了,但我不能再做了。任何帮助都是非常棒的!
仅供参考,我的工作表设置为 日期/标题/事件ID

谢谢!

推荐答案

首先是代码中的几个错误...

  1. 您更新了第[3]行,但忘记了用其对应的行值更新数据,我简化了只使用数据作为变量的做法。
  2. 您使用row[3]作为第三列,它是row[2](现在是data[i][2])
  3. 您在循环中的错误位置更新了工作表
工作代码如下(出于测试目的,我将Call ID更改为我自己的ID...当然,恢复您的)

至于时间限制,您应该按有限批次的事件继续进行,查看执行记录,看看1和乘以...需要多长时间才能获得远低于5分钟的值,这是Google脚本中的最大执行时间。 然后,您应该将行索引(I)的值保存在某个位置,并使用TIME触发器继续从该索引开始的下一批处理。

创建documentation on trigger将对您有所帮助,the scriptProperties是将索引值保存在键/值模式中的理想位置。另请参阅文档。

如果您对此有问题,请毫不犹豫地提出新的问题。

function exportEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var headerRows = 1;  // Number of rows of header info (to skip)
  var range = sheet.getDataRange();
  var data = range.getValues();
  var calId = "h22nevo15tm0nojb6ul4hu7ft8@group.calendar.google.com";
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    if (i < headerRows) continue; // Skip header row(s)
    var date = new Date(data[i][0]);  // First column
    var title = data[i][1];           // Second column
    var id = data[i][2];              // third column == eventId
    // Check if event already exists, update it if it does
    try {
      var event = cal.getEventSeriesById(id);
    }
    catch (e) {
      // do nothing - we just want to avoid the exception when event doesn't exist
}
    if (!event) {
      Logger.log(event);
      var newEvent = cal.createAllDayEvent(title, date);
      data[i][2] = newEvent.getId();  // Update the data array with event ID
    }
    else {
      event.setTitle(title);
    }
  }
  Logger.log(data);
  sheet.getRange(1,1,data.length,data[0].length).setValues(data);

}

这篇关于Google脚本超过了最大执行时间&/Google Cal脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆