Google Apps脚本尚未完成

时间:2014-03-05 04:53:00

标签: javascript google-apps-script

我目前正在尝试创建一个贯穿我的Google电子表格的脚本,并使用电子表格中的信息更新Google日历。

我的代码基于找到的答案here

以下是代码:

/**
 * Export events from spreadsheet to calendar
 */
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 = "<ID>";
  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[9]);
    var title = row[19]+" - "+row[3]+" - "+row[1]+" - "+row[2];
    var id = row[28];
    // Check if event already exists, delete it if it does
    try {
      var event = cal.getEventSeriesById(id);
      event.deleteEventSeries();
      row[28] = '';  // Remove event ID
    }
    catch (e) {
      // do nothing - we just want to avoid the exception when event doesn't exist
    }
    var newEvent = cal.createAllDayEvent(title, date).getId();
    row[28] = newEvent;  // Update the data array with event ID
    debugger;
  }
  // Record all event IDs to spreadsheet
  range.setValues(data);
};

它在很大程度上起作用。它遍历电子表格,对于设置了日期的行,它会添加一个具有正确标题的日历条目。

但是,这需要很长时间才能完成,我可以观看日历并观看脚本逐个慢慢添加事件。我以为它几乎是即时的。最重要的是,它从未真正完成。我不确定它是否无法完成或者它是否可以超时,但它永远不会完成,它永远不会到达将事件ID写入电子表格的部分,这是一个问题,因为没有eventIDs ,该函数将继续创建重复的条目。

可能相关的是,并非每一行都设置了日期,因此循环运行的某些时间,因为日期为空,所以不会创建任何事件。

我错过了什么东西在我的脚本中运行效率非常低?如何加快速度并使其达到目的?

1 个答案:

答案 0 :(得分:0)

电子表格有多大?如果工作表中的行太多,则脚本可能会超时。

我建议你创建一个基于时间的触发器来处理批处理中的'n'行,一旦处理完工作表中的所有行,触发器就应该自行删除。