找不到方法创建事件(字符串,字符串,字符串)



我有一个电子表格,上面有+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));
}
}

来自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);
}

试试这个:

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(( 构造函数将接受的形式。参考

最新更新