从谷歌电子表格更新日历

时间:2015-10-05 05:34:02

标签: google-apps-script google-sheets spreadsheet google-spreadsheet-api

我想从电子表格中更新我的日历:

我尝试了以下内容:

function caltest1() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 5);
  var data = dataRange.getValues();
  var calId = "TestCalendar"; 
  var cal = CalendarApp.getCalendarById(calId);
  for (i in data) {
    var row = data[i];
    var title = row[0];  // First column
    var desc = row[1];       // Second column
    var tstart = row[2];
    var tstop = row[3];
    var loc = row[4];
    //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
    cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
 }
}

但是,我收到以下错误:

TypeError: Cannot call method "createEvent" of null

使用以下电子表格:

Link to spreadsheet

任何建议,我做错了什么?

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

简短回答:您将日历的名称传递给getCalendarById(),因此它正在返回null。将“TestCalendar”更改为日历的ID或使用getCalendarsByName()

我将按照我阅读的方式引导您完成此操作,以便您可以看到一种方法来调试它。

此错误告诉您,cal变量在您呼叫null的最后一行是cal.createEvent( ... )。这意味着您之前的语句var cal = CalendarApp.getCalendarById(calId);正在返回null。使用Google Calendar API搜索此功能我发现您使用的是getCalendarId()的正确语法,但您传递的字符串参数似乎是日历的名称,而不是ID。