首页 > 解决方案 > 使用 Google 脚本中的表单条目填充电子邮件主题行

问题描述

我对谷歌脚本完全陌生。我尝试了这里找到的脚本(由 Snipe 编写并由 Govoni 在第一条评论中编辑)。

我想做的是结合这两个脚本,在表单提交时收到一封电子邮件:

下面的代码有效。

function newResponse()

{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formName = ss.getSheetByName('Form Responses 1');
var lastRow = formName.getLastRow();
var lastColumn = formName.getLastColumn();
var email = "sample@myemail.com"; 
var name = "My Email";
var subject = 'New form response: ';
var body = '';
var cell = '';
for (var i = 1; i <= lastColumn ; i++)
{
var title = formName.getRange(1,i).getDisplayValue();
var cell = formName.getRange(lastRow, i).getDisplayValue();
if (cell != '' && cell != 0)
{
body = body + '<b>'+ title + '</b>: ' + cell + '<br>';
};
};

MailApp.sendEmail({
to: email,
name: name,
subject: subject,
htmlBody: body
});
}

因此,为了尝试将变量条目添加到主题行,我将“function newResponse()”更改为“function newResponse(e)”,并在 MailApp:sendEmail 之前添加了这一行:

// The email subject line should look like this: "New form response: Item (Company, Country)"
// Item, Company and Country are the 2nd, 3rd and 4th columns from my form
subject += e.namedValues[title[1]].toString() + " (" + e.namedValues[title[2]].toString()+ ", "
+ e.namedValues[title[3]].toString()+ ")";

但是当我这样做时,它根本不会发送电子邮件。如果我更改 e.namedValues 而是输入类似 [title[0]] 的内容,它会返回最后一个回答问题的第一个字母。

我不太确定下一步该尝试什么?

标签: javascriptgoogle-apps-scriptgoogle-sheetsgoogle-forms

解决方案


从您的代码片段中,我想title变量包含一个字符串,字符串title[0]的第一个字符也是如此。e.namedValues[title[1]]如果undefined没有问题是单字符的话。undefined.toString()将引发错误,使整个脚本崩溃。

您需要保存工作表中所有列的标题数组。

var titles = [];
for (var i = 1; i <= lastColumn ; i++) {
  var title = formName.getRange(1,i).getDisplayValue();
  titles.push(title);
  var cell = formName.getRange(lastRow, i).getDisplayValue();
  ...
}

之后,您将能够使用e.namedValues[titles[1]]. 请注意,我使用titles, 数组。


推荐阅读