如何基于Google表单提交自动更新表格并发送PDF邮件?
解决方案:利用onFormSubmit触发器实现成本计算器自动化流程
一、绑定onFormSubmit触发器
要实现表单提交后的自动流程,首先给脚本绑定表单提交触发事件:
- 打开你的Google Sheet,点击顶部「扩展程序」>「Apps脚本」进入脚本编辑器
- 点击左侧「触发器」图标(闹钟样式)
- 点击「添加触发器」,按以下配置设置:
- 要运行的函数:
onFormSubmit - 部署类型:
Head - 事件源:
电子表格 - 事件类型:
表单提交
- 要运行的函数:
- 保存并完成授权(首次授权需按提示允许脚本访问表格和邮箱)
二、编写核心自动化脚本
将以下代码粘贴到脚本编辑器中,根据你的实际表格结构调整参数:
function onFormSubmit(e) { // 1. 提取表单提交的关键数据 const submitData = e.namedValues; // 替换为你表单中「提交人/乐队名称」的字段名(需与表单问题标题完全一致) const targetBandName = submitData['乐队名称'][0]; // 替换为你表单中「联系邮箱」的字段名 const submitterEmail = submitData['联系邮箱'][0]; // 2. 更新「Tour Calculator」标签的乐队名称 const tourCalcSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tour Calculator'); // 替换为你实际的下拉框单元格位置(比如A1、B2等) tourCalcSheet.getRange('A1').setValue(targetBandName); // 强制刷新表格公式,确保VLOOKUP数据同步更新 SpreadsheetApp.flush(); // 3. 生成「PDF」标签的PDF文件 const pdfSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PDF'); const pdfBlob = pdfSheet.getAs('application/pdf'); pdfBlob.setName(`${targetBandName}成本计算表.pdf`); // 4. 调用邮件发送逻辑(替换为你已有的邮件函数,或使用下方示例) sendCalculationEmail(submitterEmail, targetBandName, pdfBlob); } // 示例邮件发送函数(如果你的现有代码不支持附件,可替换为这个) function sendCalculationEmail(to, bandName, pdfAttachment) { const subject = `${bandName}成本计算表已生成`; const body = `您好,附件是您提交的${bandName}成本计算表PDF文件,请查收。`; GmailApp.sendEmail(to, subject, body, { attachments: [pdfAttachment] }); }
三、关键配置说明
- 表单字段匹配:确保
submitData['乐队名称']和submitData['联系邮箱']中的字段名与你Google表单里的问题标题完全一致(包括空格和标点) - 单元格位置调整:
tourCalcSheet.getRange('A1')需替换为「Tour Calculator」标签中下拉框实际所在的单元格坐标 - 公式刷新:
SpreadsheetApp.flush()用于强制表格计算VLOOKUP公式,避免生成PDF时数据未更新 - 邮件函数兼容:如果你的现有邮件发送代码已有逻辑,只需将生成的
pdfBlob作为附件传入即可
内容的提问来源于stack exchange,提问作者luz
相关产品推荐
相关产品推荐

