2014-01-16 1 views
0

Я немного новичок в этом, поэтому заблаговременно за помощь! Я получил письмо с подтверждением, основанное на триггере отправки/событии для формы Google в электронной таблице. Тем не менее, я хочу, чтобы сценарий захватил два поля из представления пользователя, а затем вычислил поле, которое будет включено в письмо с подтверждением. Как только я добавил в код для вычисления поля (cost1), письмо с подтверждением прекратило отправку. Я проверил транскрипт выполнения, и он работал намного быстрее и сказал, что он выполнен успешно, но не отправлено электронное письмо ... Что-то не так с моим кодом, или я прошу сценарий сделать слишком много?Как вычислить переменную в скрипте электронной таблицы Google, а затем вернуться в подтверждение по электронной почте

Сценарий:

function EmailFormConfirmation() { 


    var sheetName = "Form Responses"; 
    var columnNumber = 3; 
    var subject = "Summer School Registration Confirmation"; 
    var gn = 2; 
    var sfn = 4; 
    var sln = 5; 
    var s1 = 13; 
    var s2 = 14; 


    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var dataSheet = ss.getSheetByName(sheetName); 
    var numRows = dataSheet.getLastRow(); 
    var email = dataSheet.getRange(numRows,columnNumber).getValue(); 
    var guardianName = dataSheet.getRange(numRows,gn).getValue(); 
    var studentFirst = dataSheet.getRange(numRows,sfn).getValue(); 
    var studentLast = dataSheet.getRange(numRows,sln).getValue(); 
    var session1 = dataSheet.getRange(numRows,s1).getValue(); 
    var session2 = dataSheet.getRange(numRows,s2).getValue(); 
    var emailPattern = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/; //email reg expression 
    var validEmailAddress = emailPattern.test(email); 
    var cost1 = 0 
    if(session1 === "Driver's Education Classroom & Behind the Wheel") 
    { 
     var cost1 = cost1+400 
    } 
    else 
    { 
     var cost1 = cost1+180 
    } 

    if(session2 > 0) 
    { 
     var cost1 = cost1+180 
     return(cost1) 
    } 
    else 
    { 
     return(cost1) 
    }; 
    var body = "Dear" + " " + guardianName + "," + 
    "\n\nThank you for submitting summer school registration for" + " " + studentFirst + " " + studentLast + "." + 
    "\n\nYou have selected the following for Session 1:" + " " + session1 + 
    "\n\nYou have selected the following for Session 2:" + " " + session2 + 
    "\n\nIf any changes need to be made, please contact the office." + 
    "\n\nYour total fees due for summer school are:" + " " + "$" + cost1 + 
    "\n\n\nSummer School Registrar"; 

    if (validEmailAddress) { 

     MailApp.sendEmail(email, subject,body); 
    } 

    } 

ответ

0

return всегда последняя вещь, чтобы работать в функции JS и замыкающее вашу функцию перед MailApp.sendEmail запускается. Кроме того, переменными в JS являются функция с областью. Таким образом, вам не нужно объявлять var внутри ваших блоков if.

Ниже я использовал тернарный оператор [test ? if true : else] и задал длинную строку переменной.

расчет Ваша стоимость должна выглядеть примерно так:

var dcebw = "Driver's Education Classroom & Behind the Wheel"; 

var cost1 = session1 === dcebw ? 400 : 180; 

cost1 += session2 > 0 ? 180 : 0; 
+0

То есть вещь красоты! Еще один вопрос, однако, он отправил электронное письмо и сообщил об общей стоимости как 180 долларов США вместо 360 долларов, если сделаны два выбора, поэтому я предполагаю, что мой «session2> 0» не работает вместо «не является нулевым», , Есть ли способ исправить это? Еще раз благодарю вас за вашу помощь! –

+0

С вашего вопроса, я собираюсь предположить, что 'session2' не является числом. Если второй сеанс не является числом, то 'session2> 0' всегда будет ложным. Если вы просто хотите проверить, что 'session2' является [правдивым] (http://www.sitepoint.com/javascript-truthy-falsy/), вы можете использовать' cost1 + = session2? 180: 0; ' – fooby