我查看了其他类似的帖子,并在正确设置触发器方面获得了一些帮助,但仍然有错误。
我试图自动发送一个 pdf 文档以通过电子邮件发送以响应谷歌应用程序中的表单提交。我使用了一个在网络上共享的脚本来开始并修复了一些不推荐使用的术语。我创建了一个嵌入占位符
的文档模板,并创建了一个表单来捕获数据。keyItems
与表单关联的电子表格正在按计划捕获数据。我编辑了与电子表格相关的脚本,希望能完成提交表单所需的工作。触发器看起来正确设置为运行on form submit
from the spreadsheet
。我的问题是关于我反复得到的关于e.values
未定义的错误。我以为我会将这些标记为e.values[0]
当我声明变量时——即它们将基于它们在从电子表格字段中提取的数组中的顺序。对不起,啰嗦了。如果我将虚拟内容放在变量中,它会起作用并发送 pdf,因此实际机制可以正常工作,但我e.values
无法正常工作。
这是我的脚本 // 完成证书
// 从 Google Docs 获取模板并命名
var docTemplate = "1V_PqCBZ9vWmmIELp47X12iNtdwRCqHyOyey6VPL0o0Q";
var docName = "CertificateOfCompletion";
//当表单提交时从表单获取信息并设置为变量
function onFormSubmit(e) {
var name = e.values[2];
var email = e.values[3];
var date = e.values[4];
//为提交者制作模板文档的临时工作副本
var copyId = DriveApp.getFileById(docTemplate).makeCopy(docName+' for '+name).getId();
//打开临时文档
var copyDoc = DocumentApp.openById(copyId);
// 告诉脚本进入文档
var copyBody = copyDoc.getBody();
//用提交表单中的数据替换文档中的占位符
copyBody.replaceText('keyFullName', name);
copyBody.replaceText('keyDate', date);
copyDoc.saveAndClose();
//创建PDF
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
//发送邮件给收件人
var subject = "Certificate";
var body = "Congratulations!" + name + " Here is your certificate of completion " ;
MailApp.sendEmail(email, subject, body, {htmlBody: body, attachments: pdf});
//删除临时文件
DriveApp.getFileById(copyId).setTrashed(true); }