【发布时间】:2014-09-17 16:03:49
【问题描述】:
我正在尝试从 Google 电子表格中设置年度重复事件,尽管我已关注 this answer,但我仍然无法获取写入每一行的 ID,因此我无法写入和检查条目.
列布局是
RenDate | Domain | Client | Type | Registrar | ID
代码:
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
* for invoking the exportEvents() function.
* The onOpen() function, when defined, is automatically invoked whenever the
* spreadsheet is opened.
* For more information on using the Spreadsheet API, see
* https://developers.google.com/apps-script/service_spreadsheet
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
/**
* 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 removed]@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 - Renewal Date
var domain = row[1]; // Second column - Domain
var client = row[2]; // Third column - Client
var type = row[3]; // Fourth column - Type
var source = row[4]; // Fifth column - Registrar
var id = row[5]; // Sixth column - ID
if(row[1]=="") continue; // Skip rows if no date exists
var title = type + " renewal for " + domain;
var desc = "Renew with " + source + " for " + client;
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
event.setTitle('got you'); // this is to "force error" if the event does not exist
}catch (e) {
var newEvent = cal.createEvent(title, date, {description:desc});
row[5] = newEvent.getId(); // Update the data array with event ID
Logger.log('event created'); // For debugging
var event = cal.getEventSeriesById(row[5]);
}
event.setTitle(title);
event.setDescription(desc);
var recurrence = CalendarApp.newRecurrence().addYearlyRule();
event.setRecurrence(recurrence, date);
debugger;
data[i] = row ;
}
// Record all event IDs to spreadsheet
range.setValues(data);
}
调试似乎没问题,但没有创建任何事件。我能够使用CreateAllDayEventSeries 函数创建事件,但这似乎无法使用 ID 方法解决,因此我尝试使用此方法。
编辑:进行了更改以继续被 Serge insas 捕获的功能。
现在脚本在catch 命令上找不到createEvent 的方法。
【问题讨论】:
-
为什么要写 if (row[1]) continue?这打破了循环,代码除了继续之外什么都不做......
-
这只是一种检查该单元格是否为空的方法;它适用于早期的迭代。我仍然希望该检查能够正常工作,尽管如果这是其余代码完成的问题,这是一种更好的方法。
-
那么应该是 if(row[1]=="")... 跳过空行
-
还是不行?您可以尝试在循环内添加
Logger.log(row[i]以查看确切的行内容吗? -
catch
createEvent方法失败,日志只显示第一行。
标签: google-apps-script google-calendar-api google-spreadsheet-api