[英]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.