簡體   English   中英

如何在Google App腳本中的sendEmail函數范圍內的唯一非空白列中返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM