Ключ проекта: MyvPlY2KvwGODjsi4szfo389owhmw9jII
Я пытаюсь запустить сценарий, который отправляет содержимое моей формы по электронной почте каждый раз при отправке формы. Я следил за инструкциями по этой ссылке ниже, пока я не начал получать ошибки, и я получил совет по изменению моего сценария, чтобы открыть электронные таблицы по id:
http://www.snipe.net/2013/04/email-contents-google-form/
Когда я заполняю форму, она должна отправить электронное письмо на мой адрес электронной почты.
Проблема, которую я сейчас вижу, заключается в том, что функция, которая проходит через значения формы, не работает. Он возвращает ошибку «TypeError: невозможно прочитать свойство« namedValues »из undefined. (Строка 15, файл« Код »)» в отношении фрагмента кода ниже:
for(var i in headers) message += headers[i] + ': '+ e.namedValues[headers[i]].toString() + "\n\n";
Я не слишком хорошо знаком с скриптами Google, поэтому я не уверен, как обойти эту проблему. Есть ли что-нибудь, что вы рекомендуете? Я включил весь сценарий ниже.
function sendFormByEmail(e) { // Remember to replace this email address with your own email address var email = "sample@email.com"; var s = SpreadsheetApp.openById("1hOqnK0IVa2WT6-c-MY0jyGGSpIJIV2yzTXdQYX4UQQA").getSheets()[0]; var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; var message = ""; var subject = "New User Form"; // The variable e holds all the form values in an array. // Loop through the array and append values to the body. for(var i in headers) message += headers[i] + ': '+ e.namedValues[headers[i]].toString() + "\n\n"; // Insert variables from the spreadsheet into the subject. // In this case, I wanted the new hire's name and start date as part of the // email subject. These are the 3rd and 16th columns in my form. // This creates an email subject like "New Hire: Jane Doe - starts 4/23/2013" subject += e.namedValues[headers[2]].toString() + " - starts " + e.namedValues[headers[15]].toString(); // Send the email MailApp.sendEmail(email, subject, message); }
Функция, как представляется, не определена, поскольку «e» не принимается как часть контекста функции. Вам необходимо установить триггер для отправки формы и отправить информацию функции. Вы можете использовать следующий код:
/* Send Confirmation Email with Google Forms */ function Initialize() { var triggers = ScriptApp.getProjectTriggers(); for (var i in triggers) { ScriptApp.deleteTrigger(triggers[i]); } ScriptApp.newTrigger("SendConfirmationMail") .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()) .onFormSubmit() .create(); } function SendConfirmationMail(e) { try { var ss, cc, sendername, subject, columns; var header, message, value, textbody, sender, itemID, url; // This is your email address and you will be in the CC cc = "name@email.com"; // This will show up as the sender's name sendername = "name to be displayed as sender"; // Optional but change the following variable // to have a custom subject for Google Docs emails subject = "Choose an approppiate subject"; // This is the body of the auto-reply message = ""; ss = SpreadsheetApp.getActiveSheet(); columns = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0]; // This is the submitter's email address sender = e.namedValues["Username"].toString(); // Only include form values that are not blank for ( var keys in columns ) { var key = columns[keys]; //Use this to look for a particular named key if ( e.namedValues[key] ) { if ( key == "Username" ) { header = "The user " + e.namedValues[key] + " has submitted the form, please review the following information.<br />"; } else { message += key + ' ::<br /> '+ e.namedValues[key] + "<br />"; } } } } textbody = header + message; textbody = textbody.replace("<br>", "\n"); Logger.log("Sending email"); GmailApp.sendEmail(cc, subject, textbody, {cc: cc, name: sendername, htmlBody: textbody}); } catch (e) { Logger.log(e.toString()); } }
В этой строке кода есть ошибка:
message += headers[i] + ': '+ e.namedValues[headers[i]].toString() + "\n\n";
это эта часть:
e.namedValues[headers[i]].toString()
Я просто догадываюсь, что вы хотите:
e.namedValues + [headers[i]].toString()
Если вы хотите объединить значения, вам не будет знака «плюс».