我目前正在尝试创建一个贯穿我的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 ,该函数将继续创建重复的条目。
可能相关的是,并非每一行都设置了日期,因此循环运行的某些时间,因为日期为空,所以不会创建任何事件。
我错过了什么东西在我的脚本中运行效率非常低?如何加快速度并使其达到目的?
答案 0 :(得分:0)
电子表格有多大?如果工作表中的行太多,则脚本可能会超时。
我建议你创建一个基于时间的触发器来处理批处理中的'n'行,一旦处理完工作表中的所有行,触发器就应该自行删除。