繁体   English   中英

Google Apps脚本尚未完成

[英]Google Apps Script isn't finishing

我目前正在尝试编写一个脚本,以遍历我的Google电子表格,并使用电子表格中的信息更新Google日历。

我的代码基于此处找到的答案。

这是代码:

/**
 * 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写入电子表格的部分,这是一个问题,因为没有eventID ,该函数将继续创建重复的条目。

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

我是否缺少某些脚本运行效率很低的东西? 如何加快速度并达到终点?

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

我建议您创建一个基于时间的触发器,该触发器可以批量处理“ n”行,一旦处理完工作表中的所有行,触发器应将其自身删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM