【发布时间】:2016-04-25 08:37:30
【问题描述】:
问题是:我找不到返回“课程”值的方法,因为每次提交表单都会生成一个新行,其中课程名称分布在 E 到 M 列(第 4 到 12 列)。
在每一行中,从 E 到 M 的一列中只有一个“课程”名称(例如仅在 F 中),所有其他列都是空白的。 (用户只能选择一门课程,所有其他列都将为空白。由于分页符,我必须将课程分类为 9 列,以便拆分用户从中选择课程的选项的绝对数量。) 怎么做我将 E 到 M 中唯一非空白单元格的值返回到电子邮件中?
我被建议在任何其他代码之前将整个 findCourse 函数插入到 sendEmail 函数中。我这样做了,但我仍然收到 Google App Scripts 的失败通知:TypeError: Cannot read property "values" from undefined. (line 14, file "Code")(指 var value = e.values[i])
完整代码如下:
function sendEmail(e) {
function findCourse (e){
var courseToTake;
//loop through values
for ( var i = 4; i <=12; i ++){
//pull value into variable
var value = e.values[i];
if (value != undefined){
//if we find an actual string value, set the course to take variable
courseToTake = value;
}
}
return courseToTake;
}
var Name = e.namedValues["Full name as appear in NRIC"];
var Course = findCourse();
var Start = e.values[14];
var End = e.values[15];
var StartTime = e.values[24];
var EndTime = e.values[25];
var Details = e.values[13];
var Cost = e.values[17];
var Email = e.values[18];
var ROname = e.values[19];
var ROemail = e.values[20];
var Location = e.values[23];
var subject = "Training Approval Request for " + Course;
var message = "<p >" + "Dear " + ROname + "<p />"
+ Name + " seeks your approval to attend the " + Course + ". The details are as follow:"
+ "<p >" + "<b>Date:</b> " + Start + " - " + End + " <br />"
+ "<b>Time:</b> " + StartTime + " - " + EndTime + " <br />"
+ "<b>Location:</b> " + Location + " <br />"
+ "<b>Course objectives and benefits:</b> " + Details + " <br />"
+ "<b>Course fees:</b> " + "$" + Cost + " <br />" + "<p />"
+ "Please reply directly to this email for your approval or if you have any questions/comments. Thank you. "
MailApp.sendEmail(ROemail, Email, subject, message);
}
在将 findCourse 重新安排为自己的功能后:如果我在这里犯了任何错误,我很抱歉,但我会尽力遵循所有建议。如果我在 Logger.log(e) 中添加正确,这两个函数似乎都未定义
function sendEmail(e) {
Logger.log(e);
var Name = e.values[2];
var Course = findCourse();
var Start = e.values[14];
var End = e.values[15];
var StartTime = e.values[24];
var EndTime = e.values[25];
var Details = e.values[13];
var Cost = e.values[17];
var Email = e.values[18];
var ROname = e.values[19];
var ROemail = e.values[20];
var Location = e.values[23];
var subject = "Training Approval Request for " + Course;
var message = "<p >" + "Dear " + ROname + "<p />"
+ Name + " seeks your approval to attend the " + Course + ". The details are as follow:"
+ "<p >" + "<b>Date:</b> " + Start + " - " + End + " <br />"
+ "<b>Time:</b> " + StartTime + " - " + EndTime + " <br />"
+ "<b>Location:</b> " + Location + " <br />"
+ "<b>Course objectives and benefits:</b> " + Details + " <br />"
+ "<b>Course fees:</b> " + "$" + Cost + " <br />" + "<p />"
+ "Please reply directly to this email for your approval or if you have any questions/comments. Thank you. "
MailApp.sendEmail(ROemail, Email, subject, message);
}
function findCourse (e){
var courseToTake;
//loop through values
for ( var i = 4; i <=12; i ++){
//pull value into variable
var value = e.values[i];
if (value != undefined){
//if we find an actual string value, set the course to take variable
courseToTake = value;
}
}
return courseToTake;
var courseToTake = findCourse(e);
Logger.log(e);
}
我将非常感谢这里的任何帮助或替代解决方案。
谢谢!
【问题讨论】:
-
'e' 很可能是未定义的,因为没有参数传递给
findCourse()函数。什么叫这个函数,你能把剩下的代码贴出来吗? -
这是完整的代码: function sendEmail(e) { function findCourse (e){ var courseToTake; //循环遍历值 for ( var i = 4; i
-
您可以将此代码发布到您的帖子中,格式化吗?复制/粘贴非格式化代码很痛苦,尤其是当它包含 cmets 时。
-
假设
sendEmail在表单提交时被调用,从sendEmail函数中移除findCourse函数并调用findCourse,将e作为对象传入。在调用findCourse之前,还要在你的sendEmail函数中添加一个Logger.log(e),并检查日志以查看是否在那里定义了e,还要在findcourse内记录e。回复您的发现 -
Yepp sendEmail 被表单提交触发器调用。抱歉,我能否澄清一下您调用 findCourse 的意思,将 e 作为对象传入?
标签: javascript google-apps-script