找不到方法createEvent(string,string,string)

时间:2019-08-20 01:08:26

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

我有一个包含+250行潜在客户的电子表格。 对于每一个潜在客户,我都会希望我能通知我们应该见面的日期。

我试图创建一个脚本,以便将我在单元格上输入的日期自动转换为Google日历活动。

仍然,每次我运行脚本时,都会收到“找不到方法(字符串,字符串,字符串)”错误消息。

我不知道我有几个空白单元格的事实是什么问题。

我尝试运行的代码如下:

function scheduleshifts() {
var Spreadsheet = SpreadsheetApp.getActiveSheet();
var CalendarId = Spreadsheet.getRange("Y2").getValue();
var eventcal = CalendarApp.getCalendarById(CalendarId);

var signups = Spreadsheet.getRange("C3:V250").getValues();

for (x=0; x<signups.length; x++){
var shift = signups [x];
var startTime = shift[18];
var endTime = shift[19];
var title = shift[0];
eventcal.createEvent(title, new Date(startTime), new Date(endTime));
}
}

2 个答案:

答案 0 :(得分:3)

来自OP的问题:

  

我不知道我有几个空白单元格的事实是什么问题。

是的,因为getValues返回了一个空字符串作为空白单元格的值。

解决方案是包括一个条件,以使用默认日期或为starTimeendTime变量跳过带有空单元格的行。


这种选择怎么样?假设startTimeendTime的源数据是Google表格日期值或空白(空单元格)。如果startTimeendTime是有效日期,则创建日历事件,否则创建日历事件。

function scheduleshifts() {
  var Spreadsheet = SpreadsheetApp.getActiveSheet();
  var CalendarId = Spreadsheet.getRange("Y2").getValue();
  var eventcal = CalendarApp.getCalendarById(CalendarId);

  var signups = Spreadsheet.getRange("C3:V250").getValues();

  for (x=0; x<signups.length; x++){
    var shift = signups [x];
    var startTime = shift[18];
    var endTime = shift[19];
    var title = shift[0];
    if(isValidDate(startTime) && isValidDate(endTime)){
      eventcal.createEvent(title, startTime, endTime);
      // Added the following line to prevent to exceed the limit of events created 
      // "in a short time"
      Utilities.sleep(1000); 
    }
  }
}
/* 
 * From the answer https://stackoverflow.com/a/1353711/1595451 to 
 * "Detecting an “invalid date” Date instance in JavaScript"
 */
function isValidDate(d) {
  return d instanceof Date && !isNaN(d);
}

答案 1 :(得分:0)

尝试一下:

function scheduleshifts() {
  var Spreadsheet = SpreadsheetApp.getActive();
  var CalendarId = Spreadsheet.getRange("Y2").getValue();
  var eventcal = CalendarApp.getCalendarById(CalendarId);

  var signups = Spreadsheet.getRange("C3:V250").getValues();

  for (x=0;x<signups.length;x++){
    var shift=signups[x];
    var startTime=shift[18];
    var endTime=shift[19];
    var title=shift[0];
    eventcal.createEvent(title, new Date(startTime), new Date(endTime));
    Utilities.sleep(18000);//9000 if G-Suite
  }
}

您只需要确保startTime和endTime字符串采用Date()构造函数将接受的格式即可。 Reference