[英]How to return a value in the only non-blank column in a range for sendEmail function in Google App Scripts
問題是:我找不到返回“課程”值的方法,因為每個表單提交都會生成一個新行,其中課程名稱分布在E到M列(第4到12列)。
在每一行中,從E到M的一列中只有一個“課程”名稱(例如,僅在F中),所有其他列均為空白。 (用戶只能選擇一個課程,其他所有列都將為空白。由於分頁符,我不得不將課程分為9列,以便拆分用戶從中選擇課程的大量選項。)我將E中唯一的非空白單元格的值返回到M,這將在電子郵件中輸入?
建議我將整個findCourse函數插入sendEmail函數中,然后再插入其他任何代碼。 我這樣做了,但是我仍然收到Google App腳本的失敗通知: TypeError: Cannot read property "values" from undefined. (line 14, file "Code")
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);
}
在此,我將非常感謝您提供的任何幫助或替代解決方案。
謝謝!
我在您的代碼中所做的更改以解決您的問題:
onFormSubmit
觸發器分配給您的sendEmail
函數,因此事件對象將不再是未定義的 findCourse()
的調用,因此您的course
變量將不再是未定義的 if(value != undefined)
更改為if(typeof value !== 'undefined')
來修復未定義的檢查 if(value != '')
說明:
要觸發事件,需要為指向您的sendEmail
函數的“ On Form Submit
事件設置可安裝的觸發器。 可以在Resources -> Current Project Triggers
要檢索課程,您需要調用函數findCourse()
並傳入e
事件對象。 示例: var course = findCourse(e);
。 這將分配來自findCourse(e);
的返回值findCourse(e);
course
變量。 然后,您可以在其余語句中像平常一樣使用此變量。
當檢查undefined
,您需要使用typeof
然后檢查字符串'undefined'
,否則您的檢查將諷刺地拋出未定義的異常。
表單提交的值不應為undefined
,空白值應僅為空白字符串。 因此,必須檢查非空白字符串才能從values數組中獲取課程名稱。
固定代碼:
function sendEmail(e) {
Logger.log(e)
var course = findCourse(e);
var Name = e.values[19];
var Start = e.values[12];
var End = e.values[14];
var StartTime = e.values[13];
var EndTime = e.values[15];
var Details = e.values[11];
var Cost = e.values[17];
var Email = e.values[20];
var ROname = e.values[21];
var ROemail = e.values[22];
var Location = e.values[16];
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+";" + "redactedEmail", subject, message);
}
function findCourse (e){
var courseToTake;
//loop through values
for ( var i = 2; i <=10; i ++){
//pull value into variable
var value = e.values[i];
if (typeof value !== 'undefined'){ //If value is defined
if(value != ''){ //If value is not blank
//if we find an actual non-blank string value, set the course to take variable
courseToTake = value;
}
}
}
return courseToTake;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.