javascript — Google Script отправляет значения формы по электронной почте, ошибка: невозможно прочитать свойство & quot; namedValues ​​& quot;

Ключ проекта: MyvPlY2KvwGODjsi4szfo389owhmw9jII

Я пытаюсь запустить скрипт, который отправляет содержимое моей формы по электронной почте при каждой отправке формы. Я следовал инструкциям по этой ссылке ниже до тех пор, пока не начал получать ошибки, и я получил совет изменить свой скрипт для открытия электронных таблиц по id:

http://www.snipe.net/2013/04/email-contents-google-form/

Когда я заполняю форму, она должна отправлять содержимое на мой электронный адрес.

Проблема, которую я сейчас решаю, состоит в том, что функция, которая проходит через значения формы, не работает. Он возвращает ошибку «TypeError: Невозможно прочитать свойство» namedValues ​​»из неопределенного. (Строка 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 = "[email protected]";

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

4

Решение

Кажется, что функция не определена, так как ‘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 = "[email protected]";

// 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());
}
}
3

Другие решения

У меня та же ошибка, и мне потребовалось некоторое время, чтобы понять, как ее решить.

Проблема в том, что вы пишете свой код в форме, и вы должны сделать это в своей электронной таблице.

Когда я создал функцию внутри формы и зарегистрировал событие, оно было вызвано, но у параметра не было той же структуры (и не было поля namedValues, поэтому ошибка «Невозможно прочитать свойство namedValues» из undefined ») , Лучший способ проверить это — записать объект в виде строки JSON:

Logger.log("e:  " + JSON.stringify(e));

Итак, шаги, которые я сделал, чтобы исправить эту проблему:

  1. Создать электронную таблицу
  2. Создайте форму через электронную таблицу (внутри электронной таблицы выберите «Инструменты»> «Создать форму» и создайте свою форму
  3. Вернуться к вашей таблице, и создайте скрипт (Инструменты-> Редактор скриптов)
  4. Напишите свою функцию
  5. Зарегистрируйте функцию (Редактировать-> Триггеры текущего проекта): функция sendFormByEmail, Событие: из электронной таблицы -> При отправке формы

Надеюсь это поможет

3

В этой строке кода есть ошибка:

message += headers[i] + ': '+ e.namedValues[headers[i]].toString() + "\n\n";

именно эта часть:

e.namedValues[headers[i]].toString()

Я просто догадываюсь, что вы хотите:

e.namedValues + [headers[i]].toString()

Вы пропускаете знак плюс, если хотите объединить значения.

0
По вопросам рекламы [email protected]