Javascript 谷歌应用程序脚本尚未完成
我目前正在尝试制作一个脚本,通过我的谷歌电子表格,用电子表格中的信息更新谷歌日历 我根据找到的答案编写代码 代码如下:Javascript 谷歌应用程序脚本尚未完成,javascript,google-apps-script,Javascript,Google Apps Script,我目前正在尝试制作一个脚本,通过我的谷歌电子表格,用电子表格中的信息更新谷歌日历 我根据找到的答案编写代码 代码如下: /** * Export events from spreadsheet to calendar */ function exportEvents() { var sheet = SpreadsheetApp.getActiveSheet(); var headerRows = 1; // Number of rows of header info (to ski
/**
* 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写入电子表格的部分,这是一个问题,因为没有事件ID,函数将继续创建重复条目
可能与此相关的是,并非每一行都设置了日期,因此在循环运行的某些时候,不会创建任何事件,因为日期为Null
我遗漏了什么吗?我的脚本中有什么东西运行效率很低吗?我怎样才能加快速度,让它到达终点?电子表格有多大?如果工作表中的行太多,则可能是脚本超时
我建议您创建一个基于时间的触发器,该触发器在一批中处理“n”行,一旦处理完工作表中的所有行,该触发器应删除自身。它正在超时,但它没有那么大,它所做的只是将电子表格中的所有数据记录到一个数据数组中,然后将该数组用于函数的其余部分。它所要做的就是检查每一行的两个单元格,不会花那么长的时间,我觉得一定是出了什么问题,但我不知道是什么原因。如问题中所述,我可以看着日历,看着脚本慢慢地从一行转到下一行。说真的,我可以手动更新的速度比脚本快。它正在为每一行连接日历服务,这可能会增加执行时间。你看过脚本编辑器中的执行日志了吗?它显示了任何错误吗?嗯,在调查之后,它看起来可能会在这一行中被发现:event.deleteEventSeries;知道为什么吗?另外,我添加了一个函数和一行代码,让它跳过没有有效日期的行。