因此,基于大量的互联网调查,我已经设法拼凑了一个使用Google表格创建全天日历条目的脚本。我想要为其创建事件的内容总共大约有450行,但是每次运行脚本时它都永远不会结束,而且它永远不会创建一个EventId(以解决重复的问题),相反,它给了我一个“超过最长执行时间“错误。
$ function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 0; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "evsck12.com_fp4p25esvij964uhmfs51o9ar8@group.calendar.google.com";
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[0]); // First column
var title = row[1]; // Second column
var id = row[3]; // Sixth column == eventId
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
var newEvent = cal.createAllDayEvent(title, date).getId();
row[3] = newEvent; // Update the data array with event ID
}
else {
event.setTitle(title);
range.setValues(data);
}
debugger;
}
}
我的问题是这些:
作为参考,我的工作表设置为 日期/标题/ eventId
感谢!!!!
答案 0 :(得分:1)
首先在代码中出现一些错误......
row[3]
作为第三列,它是row[2]
(现在data[i][2]
)下面是工作代码(为了测试目的,我将校准ID更改为我自己的代码......当然还原你的代码)
至于时间限制,你应该通过有限的一批事件来进行,看看执行记录,看看1需要多长时间,然后乘以...得到一个远低于5分钟的值,这是最大的Google Script中的执行时间。 然后你应该保留行索引(i)的值,并使用时间触发器继续从该索引开始的下一批处理。
documentation on trigger创建将为您提供帮助,而the scriptProperties是将索引值保存在键/值架构中的理想位置。另见doc。
如果您遇到问题,请不要犹豫,回答一个新问题。
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 = "h22nevo15tm0nojb6ul4hu7ft8@group.calendar.google.com";
var cal = CalendarApp.getCalendarById(calId);
for (i in data) {
if (i < headerRows) continue; // Skip header row(s)
var date = new Date(data[i][0]); // First column
var title = data[i][1]; // Second column
var id = data[i][2]; // third column == eventId
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
Logger.log(event);
var newEvent = cal.createAllDayEvent(title, date);
data[i][2] = newEvent.getId(); // Update the data array with event ID
}
else {
event.setTitle(title);
}
}
Logger.log(data);
sheet.getRange(1,1,data.length,data[0].length).setValues(data);
}