我有一个包含+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));
}
}
答案 0 :(得分:3)
来自OP的问题:
我不知道我有几个空白单元格的事实是什么问题。
是的,因为getValues
返回了一个空字符串作为空白单元格的值。
解决方案是包括一个条件,以使用默认日期或为starTime
和endTime
变量跳过带有空单元格的行。
这种选择怎么样?假设startTime
和endTime
的源数据是Google表格日期值或空白(空单元格)。如果startTime
或endTime
是有效日期,则创建日历事件,否则创建日历事件。
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