我正在修改Amit的代码(在此处找到:http://labnol.org/?p=20884) 尝试使用Google表单中的数据发送电子邮件。 但我想要抓住的是他的钥匙和专栏。 我想专门从相关行中获取前1列和第2列的数据,并将其用作主题字段中的var。 但是输出(在电子邮件中和发送到体式时)被列为未定义。我哪里出错了?
/*
Send Google Form Data by Email v4.2
Written by Amit Agarwal amit@labnol.org
Source: http://labnol.org/?p=20884
*/
/**
* @OnlyCurrentDoc
*/
function Initialize() {
try {
var triggers = ScriptApp.getProjectTriggers();
for (var i in triggers)
ScriptApp.deleteTrigger(triggers[i]);
ScriptApp.newTrigger("EmailGoogleFormData")
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onFormSubmit().create();
} catch (error) {
throw new Error("Please add this code in the Google Spreadsheet");
}
}
function EmailGoogleFormData(e) {
if (!e) {
throw new Error("Please go the Run menu and choose Initialize");
}
try {
if (MailApp.getRemainingDailyQuota() > 0) {
// You may replace this with another email address
var email = "x+00000000@mail.asana.com";
// Enter your subject for Google Form email notifications
var key, entry,
message = "",
ss = SpreadsheetApp.getActiveSheet(),
cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
// Iterate through the Form Fields
for (var keys in cols) {
key = cols[keys];
entry = e.namedValues[key] ? e.namedValues[key].toString() : "";
// Only include form fields that are not blank
if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
message += key + ' :: ' + entry + "\n\n";
var first = entry[1];
var last = entry[2];
var subject = first+" "+last+": Interested Candidate";
}
MailApp.sendEmail(email, subject, message);
}
} catch (error) {
Logger.log(error.toString());
}
}
/* For support, contact developer at www.ctrlq.org */
答案 0 :(得分:1)
entry
是一个字符串,在此处定义:
entry = e.namedValues[key] ? e.namedValues[key].toString() : "";
...您稍后将其视为数组:
var first = entry[1];
var last = entry[2];
此时,first
和last
都是undefined
,因为entry
不是数组。此外,这是在遍历行中所有列的for
循环内部 - 您无法看到任何不良副作用,但这些分配和subject
的生成多次发生
最后一条线索表明了实现目标的更好方法。使用默认值在循环之前定义first
和last
变量。然后循环遍历列时,请注意包含候选项名称的列,并更新默认内容。最后,在循环之后,生成主题行。
function EmailGoogleFormData(e) {
if (!e) {
throw new Error("Please go the Run menu and choose Initialize");
}
try {
if (MailApp.getRemainingDailyQuota() > 0) {
// You may replace this with another email address
var email = "x+00000000@mail.asana.com";
// Enter your subject for Google Form email notifications
var key, entry,
first = "unknown", last = "unknown",
message = "",
ss = SpreadsheetApp.getActiveSheet(),
cols = ss.getRange(1, 1, 1, ss.getLastColumn()).getValues()[0];
// Iterate through the Form Fields
for (var keys in cols) {
key = cols[keys];
entry = e.namedValues[key] ? e.namedValues[key].toString() : "";
// Only include form fields that are not blank
if ((entry !== "") && (entry.replace(/,/g, "") !== ""))
message += key + ' :: ' + entry + "\n\n";
if (key == "first") { // Assumes "first" is column header
first = entry;
}
if (key == "last") { // Assumes "last" is column header
last= entry;
}
}
var subject = first+" "+last+": Interested Candidate";
MailApp.sendEmail(email, subject, message);
}
} catch (error) {
Logger.log(error.toString());
}
}
答案 1 :(得分:1)
Sandy Good创建了一个类似的应用Data Director。我不知道他为什么不在这里提到它?可能不是你想要的。
我还没有使用它,但认为他的作品可能会帮助那些需要它的人。
<强>概览强>
将表单数据发送到不同的表单。与日历集成。发送电子邮件。制作修改网址和/或预填充网址。
Forms Director for Forms Add-on具有多个功能。它可以将表单响应发送到备用电子表格。提交表单时,它可以发送电子邮件或多封电子邮件。它可以为您的日历活动添加访客。 提交Google表单后,Data Director for Forms Add-on可以提交最后一个表单,并将其保存到您选择的第二个电子表格目标中。目标电子表格可以是您的Google帐户有权写入的任何Google电子表格。例如:您的Google表单目前将数据写入电子表格,但您希望表单响应也进入同一电子表格中的第二个表单。这个附加组件可以做到这一点。或者,加载项可以将表单响应的副本写入完全不同的电子表格。 如果要将表单响应的副本保存到表单设计中设置的目标以外的目标,则应安装此附加组件。 但并非所有Data Director都能做到! Data Director还将创建编辑URL和/或预填充URL,并将这些链接保存到电子表格中。 还有更多!它还会通过自定义消息向您选择的电子邮件地址发送电子邮件。这是您可能需要或需要使用的额外选项。
这是一个Data Director可以做的列表!
将表单回复的副本发送到Google电子表格。
已收到表单回复的相同Google电子表格,或
与当前收到表单回复的电子表格不同。
如果选择,请从复制的响应中排除时间戳。默认设置是包含时间戳。
创建编辑网址并保存指向目标电子表格的链接。
创建预填充网址并将链接保存到目标电子表格。
将多封电子邮件发送到您选择的电子邮件地址。
发送电子邮件至从表单字段收集的电子邮件地址。
在电子邮件中包含修改网址和/或预填充网址。
将电子邮件发送到您选择的地址。
包括指定主题行的选项。
电子邮件的正文可以写入电子邮件的设置中。无需创建模板电子邮件。