【问题标题】:Google Script "Exceeded Maximum Execution Time" / Google Cal Script谷歌脚本“超过最大执行时间”/谷歌校准脚本
【发布时间】:2014-02-07 15:39:28
【问题描述】:

因此,根据大量互联网调查,我设法拼凑出一个脚本,该脚本使用 Google 表格创建全天日历条目。大概有大约 450 行我想为其创建事件的内容,但是每次我运行脚本时它永远不会结束,它永远不会创建 EventId(以解决重复问题),相反,它给了我一个“超过最大执行时间”错误。

    $ 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

谢谢!!!!

【问题讨论】:

    标签: google-apps-script google-sheets google-calendar-api google-docs


    【解决方案1】:

    代码中的前几个错误...

    1. 您更新了 row[3] 但忘记用相应的行值更新数据,我通过仅使用数据作为变量进行了简化。
    2. 你在第三列使用了row[3],它是row[2](现在是data[i][2]
    3. 您在循环中的错误位置更新了工作表

    工作代码如下(我将 cal ID 更改为我拥有的用于测试目的...当然恢复你的)

    至于时间限制,您应该通过有限批次的事件进行,查看执行记录以查看 1 所需的时间并乘以...得到一个远低于 5 分钟的值,这是最大值Google Script 中的执行时间。 然后,您应该将行索引 (i) 的值保留在某处,并使用时间触发器继续从该索引开始的下一批。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多