google-apps-script - 如果问题有特定答案,Google 表格会在提交新表单时发送电子邮件
问题描述
我希望你能提供帮助,我试图找到一个解决方案,但我无法找到一个解决我的问题的解决方案。如果学生要求更改他们的课程,我有一个表格可以收集信息,我们是一个多学校站点,并且根据站点的不同,需要不同的工作人员来批准更改。
收集的部分信息是站点代码 OAAd,例如,此信息保存在 F 列中。如果收到提交,则“在表单提交”触发器中,触发脚本。目前它似乎不起作用,但它触发没有错误。如果我更改触发器“编辑时”并编辑 F 列中的单元格,它工作正常。最终,我将使用 ifElse 为每个站点添加其他选项,但如果我能让它为一个站点工作,那就太好了。
function sendEmailapproval(e) {
if(e.range.getColumn()==6 && e.value=='OAAd'){
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email Addresses").getRange("B3");
var recipent = emailRange.getValue();
var html = HtmlService.createTemplateFromFile("Email1.html");
var htmlText = html.evaluate().getContent();
var subject = "New Change Log Request Post 16";
var body = "";
var options = { htmlBody: htmlText}
MailApp.sendEmail(recipent, subject, body, options)
}
}
解决方案
背景
onFormSubmit
添加触发器有 2 个选项:
- 使用表单设置/脚本。
- 使用附加的电子表格脚本。
这两种方法都提供了一个event
对象来与新提交的响应进行通信,但是这些对象之间存在差异,因此您需要提前决定选择哪种方法。您可以在此处阅读有关此主题的更多信息。
对于您的建议,更愿意使用电子表格脚本,因为它更容易从中提取特定值。
解决方案
首先,这是您的正确sendEmailapproval
功能:
function sendEmailapproval(e) {
const namedValues = e.namedValues
const question = 'Question 3'; // copy-paste from the form
switch (namedValues[question][0])
{
case 'OAAd':
const emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email Addresses").getRange("B3");
const recipent = emailRange.getValue();
const html = HtmlService.createTemplateFromFile("Email1.html");
const htmlText = html.evaluate().getContent();
const subject = "New Change Log Request Post 16";
const body = "";
const options = { htmlBody: htmlText}
MailApp.sendEmail(recipent, subject, body, options)
break;
// case 'SOMETHING_ELSE':
// break;
default:
}
}
请注意,这e.namedValues
是一个对象,其中每个键都映射到一个数组。所以namedValues[question][0]
指的是字符串的值namedValues[question]
。
其次,将触发器添加到附加到表单的电子表格中。
function createTrigger() {
const sheet = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID").getSheetByName("THE_SHEET_NAME");
ScriptApp.newTrigger("sendEmailapproval")
.forSpreadsheet(sheet)
.onFormSubmit()
.create();
}
推荐阅读
- c++ - 构造函数隐式删除
- ios - 关闭时的 Swift 模态过渡部分卷曲卡住了
- javascript - 如何在这个 superagent 调用中使用 aysnc/await?
- c# - 如何使用 IText 7 从 PDF 中提取页面?
- javascript - 带有 if else 语句的简单 Javascript For 循环
- facebook - 重新请求拒绝的 Facebook 权限
- ios - SwiftUI - 使用 drawingGroup() 禁用 TextField
- reactjs - useState 没有给出预期的结果
- python - Python - selenium 命令行浏览器
- kotlin - 如何使用 getHour() 在 kotlin 中获取当前时间