【问题标题】:Google script google sheet to calendar TypeError: Cannot find function createEvent in object Calendar. (line 18, file "Code")谷歌脚本谷歌表到日历类型错误:在对象日历中找不到函数 createEvent。 (第 18 行,文件“代码”)
【发布时间】:2015-01-16 16:54:36
【问题描述】:

我试图创建一个谷歌脚本,该脚本将根据谷歌表格中单元格内的信息创建日历事件。我已经到了所有东西都被标记和标记的地步,但是发生了一个错误,指出:

TypeError:在对象日历中找不到函数 createEvent。 (第 18 行,文件“代码”)

这是我写的代码:

function calInsert() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 25;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 2, numRows, 9);
  var data = dataRange.getValues();
  var cal = CalendarApp.getCalendarsByName( "EC Calendar" );
  for (i in data) {
    var row = data[i];
    var title = row[1];  // First column
    var tstart = row[2]; // Second column
    var tstop = row[3];
    var desc = row[4];       
    var loc = row[5];
    var cmmail = row[6];
    var leamail = row[7];

  var event = cal.createEvent(title, new Date(tstart), new Date(tstop), {description:desc,location:loc,guests:cmmail,guests:leamail}); 

} }

如果您能提供任何帮助,我们将不胜感激。

【问题讨论】:

  • 根据documentationCalendarApp.getCalendarsByName的返回值应该是Calendars数组,而不是单个Calendar对象。但是在您的错误消息中,它似乎已经属于 Calendar 类型。你试过用cal[0].createEvent(...)吗?

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


【解决方案1】:

var cal = CalendarApp.getCalendarsByName("EC Calendar"); 这为您提供了具有该名称的日历数组。将其更改为:

var cal = CalendarApp.getCalendarsByName("EC Calendar")[0]; //获取正确的日历 这为您提供了第一个具有该名称的日历。我尝试了以下代码:

function calInsert() {
 var sheet = SpreadsheetApp.getActiveSheet();
 var startRow = 2;  // First row of data to process
 var numRows = 2;   // Number of rows to process
 var dataRange = sheet.getRange(startRow, 1, numRows, 5);
 var data = dataRange.getValues();
 var cal = CalendarApp.getCalendarsByName( "calendar ID" )[0];
 for (i in data) {
    var row = data[i];
    var title = row[0];  // First column
    var tstart = row[2]; // Second column
    var tstop = row[3];
    Logger.log(tstop);
    var desc = row[1];       
    var loc = row[4];
   //var cmmail = row[6];
   //var leamail = row[7];

   cal.createEvent(title, new Date(tstart), new Date(tstop),     {description:desc,location:loc}); 
}
}

我可以在我的日历中创建活动。如果需要,您可以发送 cmmail 和 leamail 到 createEvent。

【讨论】:

  • 谢谢!在添加您的建议并调整行#s 后我让它运行,它用正确的输入填充了日历......我还有 2 个额外的问题:1. 我将如何告诉它添加 2guest 电子邮件(cmmail 和 leamail)并发送邀请电子邮件(如果可能),以及 2. 是否有可能使该功能在多次运行时不会创建重复事件?
  • @T Raser,如果它帮助您解决问题,请接受我的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多