String 我做错了什么,我一直收到一条消息,第12行不好(从工作表到日历)

String 我做错了什么,我一直收到一条消息,第12行不好(从工作表到日历),string,google-apps-script,google-sheets,google-calendar-api,String,Google Apps Script,Google Sheets,Google Calendar Api,我试图将工作表中的事件添加到日历中,但在最后一行代码中不断出现错误 function addevents() { var ss = SpreadsheetApp.getActiveSheet(); var lr = ss.getLastRow(); var cal = CalendarApp.getCalendarById("maytavbus.com_jm741jospf0kv3f2se2kpo88i0@group.calendar.google.com") var data

我试图将工作表中的事件添加到日历中,但在最后一行代码中不断出现错误

function addevents() {
  var ss = SpreadsheetApp.getActiveSheet();
  var lr = ss.getLastRow();
  var cal = CalendarApp.getCalendarById("maytavbus.com_jm741jospf0kv3f2se2kpo88i0@group.calendar.google.com")
  var data = ss.getRange("A1:C" + lr).getValues();
  for(var i = 0; i < data.length; i++) {
    cal.createAllDayEvent(data[i][0], data[i][1], data[i][2])
  }
}
您可能要尝试:

cal.createAllDayEvent(数据[i][0]、新日期(数据[i][1])、新日期(数据[i][2])


我假设最后两个是日期。

正如我在您对@Cooper answer的评论中看到的,开始日期和结束日期是相同的。这就是您得到错误
事件开始日期必须早于事件结束日期的原因。(第11行,文件“代码”)

如果您希望活动只持续一天,您应该只提供一个日期,如中所示。仅当活动持续一天以上时,才应使用

如果某些事件仅跨越一天,而某些事件跨越多天,则可以添加一个比较两个日期的条件,以便根据该条件使用不同的方法

因此,您可以尝试更改此选项:

for(var i=0; i < data.length; i++) {
  var title = data[i][0];
  var startDate = new Date(data[i][1]); 
  var endDate = new Date(data[i][2]);
  cal.createAllDayEvent(title, startDate, endDate);
}
for(变量i=0;i
为此:

for(var i = 0; i < data.length; i++) {
  var title = data[i][0];
  var startDate = new Date(data[i][1]);
  var endDate = new Date(data[i][2]);
  if(startDate.getFullYear() == endDate.getFullYear() && startDate.getMonth() == endDate.getMonth() && startDate.getDate() == endDate.getDate()) {
    cal.createAllDayEvent(title, startDate);
  } else {
    cal.createAllDayEvent(title, startDate, endDate);
  }
}
for(变量i=0;i

我希望这能有所帮助。

请提供实际的错误消息。找不到方法createAllDayEvent(string,string,string)。(第12行,文件“代码”)谢谢@Cooperc您能提供您正在处理的电子表格的示例吗?必须为该方法提供一个字符串和两个日期。a列有事件标题,B列是开始日期,C列是结束日期事件开始日期必须在事件结束日期之前。(第11行,文件“代码”)这是我现在得到的代码#dates vs Strings就像你的事件endDate比事件startDate早。也许你有别的办法?或者是别的什么。再一次,电子表格的示例可能有用。标题开始日期结束日期FAS8学校于2019年11月1日停课0:00:00 11/1/2019 0:00:00 0647学校于2019年11月5日停课0:00:00 11/5/2019 0:00:00 SEM1学校于2019年11月5日停课0:00:00 11/5/2019 SME2学校于2019年11/5停课0:00:00 11/5 SMC3学校于2019年11/5停课0:00:00:00SY2学校于2019年11月5日停课0:00:00 11/5/2019 0:00:00 SY5学校于2019年11月5日停课0:00:00 11/5/2019 0:00:00这是应该移植的开始日期和结束日期实际日期,或者它们是字符串,如果有字符串,它们是JavaScript日期对象构造函数可以识别的标准格式吗?谢谢@Omila!但是,其中一些事件跨越几天在这种情况下,您可以设置一个比较startDate和endDate的条件,并根据该条件使用不同的方法。我用这个更新了我的答案。
for(var i=0; i < data.length; i++) {
  var title = data[i][0];
  var startDate = new Date(data[i][1]); 
  var endDate = new Date(data[i][2]);
  cal.createAllDayEvent(title, startDate, endDate);
}
for(var i = 0; i < data.length; i++) {
  var title = data[i][0];
  var startDate = new Date(data[i][1]);
  var endDate = new Date(data[i][2]);
  if(startDate.getFullYear() == endDate.getFullYear() && startDate.getMonth() == endDate.getMonth() && startDate.getDate() == endDate.getDate()) {
    cal.createAllDayEvent(title, startDate);
  } else {
    cal.createAllDayEvent(title, startDate, endDate);
  }
}