2016-04-25 1 views
0

Проблема заключается в следующем: я не могу найти способ вернуть значение для «Курса», потому что каждое представление формы генерирует новая строка, где название курса распространяется по столбцам E в M (столбец с 4 по 12).Как вернуть значение в единственном непустом столбце в диапазоне для функции sendEmail в сценариях приложений Google

В каждой строке есть только одно имя «Курс» в одном из столбцов от E до M (например, только в F), а все остальные столбцы пусты. (Пользователи могут выбрать только один курс, а все остальные столбцы будут пустыми. Я должен классифицировать курсы в 9 столбцов из-за разрывов страниц, чтобы разделить количество опций, из которых пользователи выбирают курс.) Как сделать Я возвращаю значение единственной непустой ячейки от E до M, которая будет введена в электронном письме?

Мне было рекомендовано вставить всю функцию findCourse внутри функции sendEmail перед любым другим кодом. Я так и сделал, но я до сих пор получал отказ уведомление из сценариев Google App: TypeError: Cannot read property "values" from undefined. (line 14, file "Code") (со ссылкой на значение вара = 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 (е) правильно, обе функции, как представляется, не определено

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); 

} 

Я действительно глубоко признателен за любую помощь или альтернативные решения здесь.

Спасибо!

+0

'е', скорее всего, не определено, так как нет ни одного аргумента передается в '' функции findCourse(). Что вызывает эту функцию, можете ли вы опубликовать остальную часть кода? –

+0

Это полный код: Функция sendEmail (e) { Функция findCourse (e) { var courseToTake; // цикл по значениям для (вара я = 4; г <= 12; я ++) {// нагрузочного значения в переменную значение вара = e.values ​​[I]; если (значение = не определено) { // если мы находим фактическое значение строки, установите курс взять переменную courseToTake = значение; } } return courseToTake; } – Kelly

+0

Можете ли вы разместить этот код в своем посте, отформатирован? Боль в копировании/вставке неформатированного кода, особенно когда он содержит комментарии. –

ответ

0

Что я изменил в своем коде, чтобы Ваш вопрос:

  • я назначил onFormSubmit триггер вашей sendEmail функции, чтобы объект события больше не будет неопределен
  • Я добавил вызов findCourse() так что ваш course переменная больше не будет неопределен
  • Я установил неопределенную проверку путем изменения if(value != undefined) к if(typeof value !== 'undefined')
  • Я добавил проверить на пустое значение (Это был важный бит в логике после неисправного неопределенному проверки) if(value != '')

Объяснение:

Чтобы вызвать событие, устанавливаемая триггер должен быть настроен для On Form Submit случае, указывает на вашу функцию sendEmail. Это можно найти в Resources -> Current Project Triggers

Для извлечения курса вам необходимо вызвать функцию findCourse() и передать объект события e. Пример: var course = findCourse(e);. Это назначит возвращаемое значение от findCourse(e); к переменной course. Затем вы можете использовать эту переменную, как обычно, в остальных ваших утверждениях.

При проверке на undefined вам необходимо использовать typeof, а затем проверить строку 'undefined', или ваш чек будет по иронии судьбы вызывать неопределенное исключение.

Значения формы submit не должны быть undefined, пустые значения должны быть пустыми. поэтому проверка на отсутствие пустых строк была необходима для получения имени курса из массива значений.

Фиксированный Код:

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; 
} 
+0

Спасибо миллион за исправление этого с помощью этих объяснений, Дуглас! – Kelly

Смежные вопросы