![](/img/trans.png)
[英]Google Apps Script - createEvent function not creating calendar event
[英]google apps script - createEvent error indicating NaN
谁能帮我为什么在以下代码中获得日期的“ NaN”? 我正在尝试创建一个日历事件,但它在Logger.log中一直显示“ NaN”。 执行记录显示以下内容;
“执行失败:找不到方法createEvent(string,number,number)。(第38行,文件“ Code”)
这是代码的一部分。 该脚本基于两个日期的表单提交运行。 该脚本从电子表格中获取值。 例如,两个日期可能是2014年4月1日和2014年4月2日。
这是代码:
var ptoCalendar = CalendarApp.getCalendarById("ENTER CALENDAR ID")
var startDate = Utilities.formatDate(new Date(sheet.getRange(i,j-3,1,1).getValue()), 'GMT', "yyyy-MM-dd'T'HH:mm:ss");
var cnvtStartDate = new Date(startDate).setHours(08,00,00);
Logger.log(cnvtStartDate);
var endDate = Utilities.formatDate(new Date(sheet.getRange(i,j-2,1,1).getValue()), 'GMT', "yyyy-MM-dd'T'HH:mm:ss");
var cnvtEndDate = new Date(endDate).setHours(17,00,00);
Logger.log(cnvtEndDate);
var createEvent = ptoCalendar.createEvent(recipientName+'- PTO', cnvtStartDate, cnvtEndDate);
任何帮助表示赞赏。
Serge Response之前的更新代码-我目前的解决方案。 注意:我在这里提供完整功能,就像以前一样
//This takes the date string from managersDecission() and covnerts back to a date type
function parseDate(dateString){
var time = Date.parse(dateString);
if(!time){
time = Date.parse(dateString.replace("'T'"," "));
if(!time){
bound = dateString.indexOf('T');
var dateData = dateString.slice(0, bound).split('-');
var timeData = dateString.slice(bound+1, -1).split(':');
time = Date.UTC(dateData[0],dateData[1]-1,dateData[2],timeData[0],timeData[1],timeData[2]);
}
}
return new Date(time);
}
//Used to update the employee requested PTO in the request spreadsheet with managers decision
function managersDecission() {
//Section get the tracking spreadsheet and its values & requests the decision made by manager in grabRequestID()
var ss = SpreadsheetApp.openById(trackingSS)
var sheet = ss.getSheetByName('Requests');
var data = sheet.getDataRange().getValues();
var decision = grabRequestID();
//for loop to set the decision of the manager for tracking
for (var i=0; i < data.length; i++) {
for (var j=0; j < data[i].length; j++) {
if (data[i][j] == decision[0] && decision[1] == "Approved") {
sheet.getRange(i+1,j+3,1,1).setValue(decision[1]);
var recipientEmail = sheet.getRange(i+1,j,1,1).getValue();
var recipientName = sheet.getRange(i+1,j-1,1,1).getValue();
//This section creates the calendar event for approved PTO
var ptoCalendar = CalendarApp.getCalendarById('CALENDAR ID')
var startDate = Utilities.formatDate(new Date(sheet.getRange(i+1,j-3,1,1).getValue()), 'GMT', "yyyy-MM-dd'T'HH:MM:SS");
//Debug Line
//Logger.log("start date is "+startDate)
var cnvtStartDate = parseDate(startDate);
//Debug Line
//Logger.log("parsed start date "+cnvtStartDate);
var setHourStartDate = cnvtStartDate.setHours(08,00,00,00);
//Debug Line
//Logger.log("start Hours set "+setHourStartDate);
var endDate = Utilities.formatDate(new Date(sheet.getRange(i+1,j-2,1,1).getValue()), 'GMT', "yyyy-MM-dd'T'HH:MM:SS");
//Debug Line
//Logger.log("end date is "+endDate);
var cnvtEndDate = parseDate(endDate);
//Debug Line
//Logger.log("parse end date "+cnvtEndDate);
var setHourEndDate = cnvtEndDate.setHours(15,00,00,00);
//Debug Line
//Logger.log("end Hours set "+setHourEndDate);
var createEvent = ptoCalendar.createEvent(recipientName+'- PTO', cnvtStartDate, cnvtEndDate);
SERGE的以下注释添加日志信息
[14-03-20 16:08:05:541 PDT] start date is 2014-03-31T07:03:00
[14-03-20 16:08:05:545 PDT] parsed start date Mon Mar 31 2014 00:03:00 GMT-0700 (PDT)
[14-03-20 16:08:05:545 PDT] start Hours set 1396278000000
[14-03-20 16:08:05:546 PDT] end date is 2014-04-02T07:04:00
[14-03-20 16:08:05:547 PDT] parse end date Wed Apr 02 2014 00:04:00 GMT-0700 (PDT)
[14-03-20 16:08:05:547 PDT] end Hours set 1396476000000
基于Serge注释的更新的DID某些测试,表明cnvtStartDate是日期对象
我删除了Utilities.formatDate,实际上从电子表格中提取的值是一个日期值,它将允许脚本成功运行。 问题是创建了12:00 AM的日历事件。 由于这会阻止整个工作日(PTO日),因此我需要为其设置一些开始/结束时间。
现在运行脚本并使用以下命令时:
var startDate =new Date(sheet.getRange(i+1,j-3,1,1).getValue());
var setHourStartDate = startDate.setHours(08,00,00,00);
var endDate = new Date(sheet.getRange(i+1,j-2,1,1).getValue());
var setHourEndDate = cnvtEndDate.setHours(15,00,00,00);
var createEvent = ptoCalendar.createEvent(recipientName+'- PTO', setHourStartDate, setHourEndDate);
出现以下错误。 它认为ssetHourStartDate和end是一个数字?
“执行失败:找不到方法createEvent(string,number,number)。”
然后,我将他的代码调整为以下内容:
var startDate =new Date(sheet.getRange(i+1,j-3,1,1).getValue());
var setHourStartDate = new Date(startDate.setHours(08,00,00,00));
var endDate = new Date(sheet.getRange(i+1,j-2,1,1).getValue());
var setHourEndDate = new Date(endDate.setHours(17,00,00,00));
var createEvent = ptoCalendar.createEvent(recipientName+'- PTO', setHourStartDate, setHourEndDate);
一切运行良好。 它将创建一整天的全天活动,也可以跨日历顶部创建多天的活动。
一如既往地感谢Serge指出问题..
为什么首先使用Utilities.formatDate
?
如果工作表中的单元格是日期,则无需将其转换为字符串,只需照原样使用即可。
如果您真的想以这种方式使用它,请使用如下正确的语法:
var cnvtStartDate = new Date("2014/03/20"):// I replaced with the string "as it should be"
cnvtStartDate.setHours(8,0,0,0);
Logger.log(cnvtStartDate);// this is a date object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.