在App Script中使用HTML模板处理Google表单提交记录的技术问询
解决Google Apps Script中HTML模板引用表单提交记录的问题
问题1:在App Script中使用HTML模板时,如何引用Google表单的提交记录?
- 表单提交触发的函数会收到
e事件对象,其中e.namedValues包含了所有表单字段的键值对——键是表单的问题标题,值是提交内容的数组(因为部分字段支持多选,所以用数组存储)。 - 你需要把
e.namedValues或者从中提取的单个字段值绑定到HTML模板对象上,再通过模板的evaluate()方法生成最终的HTML内容,就能在邮件里展示提交记录了。
问题2:使用HTML模板发送邮件时,能否在scriptlet中使用namedValues?
完全可以直接用,只要注意两个关键细节:
- 必须先把
namedValues赋值给模板对象(比如你代码里的outlet.named_values = named_values;这一步是正确的)。 e.namedValues里的每个值都是数组类型,单值字段需要取数组的第一个元素(比如named_values["Name"][0])才能拿到实际提交的内容。
修正后的完整代码
Google Apps Script 代码
function sendEmail(e) { // 获取表单提交的所有键值对 const namedValues = e.namedValues; // 单值字段取数组第一个元素,避免显示数组格式 const name = namedValues["Name"][0]; const timestamp = namedValues["Timestamp"][0]; const subject = `Outlet ${timestamp}`; // 加载HTML模板并绑定数据 const outletTemplate = HtmlService.createTemplateFromFile('outlet'); // 可以直接绑定整个namedValues,也可以单独绑定单个字段 outletTemplate.namedValues = namedValues; outletTemplate.name = name; outletTemplate.timestamp = timestamp; // 生成最终的HTML邮件内容 const message = outletTemplate.evaluate().getContent(); // 发送邮件 MailApp.sendEmail({ to: 'my@mail.com', subject: subject, htmlBody: message }); }
HTML模板(outlet.html)
<!DOCTYPE html> <html> <body> <ul> <!-- 方式1:直接使用单独绑定的变量 --> <li><b>Company:</b> <?= name ?></li> <li><b>Location:</b> <?= timestamp ?></li> <!-- 方式2:直接通过namedValues引用(注意数组取值) --> <li><b>通过namedValues获取Name:</b> <?= namedValues["Name"][0] ?></li> <li><b>通过namedValues获取Timestamp:</b> <?= namedValues["Timestamp"][0] ?></li> </ul> </body> </html>
额外注意事项
- 表单的问题标题和代码中引用的键必须完全一致(大小写敏感,比如表单里是“Name”,代码里不能写成“name”)。
- 如果是多选字段,不需要取
[0],可以遍历数组展示所有选中项,示例:<li><b>多选选项:</b> <? for (let option of namedValues["你的多选问题标题"]) { ?> <?= option ?><br> <? } ?> </li> - 记得给表单绑定触发器:打开脚本编辑器 → 左侧点击“触发器”图标 → 添加触发器,选择
sendEmail函数,事件源选“表单提交”。
内容的提问来源于stack exchange,提问作者Ibitoyei
相关产品推荐
相关产品推荐

