我已经查看了其他类似帖子,并在正确设置触发器方面获得了一些帮助,但仍有错误
我已尝试自动发送pdf文档以通过电子邮件发送以响应Google应用中的表单提交。我使用在网络上共享的脚本开始并修复了一些已弃用的术语
我创建了一个嵌入了keyItems
作为占位符的文档模板,并创建了一个表单来捕获数据。与表单关联的电子表格按计划捕获数据。我编辑了与电子表格相关联的脚本,希望能够完成提交表单所需的工作。触发器看起来已正确设置为运行on form submit
from the spreadsheet
。我的问题是关于e.values
未定义的重复错误。当我宣布变量时,我假设我将这些标记为e.values[0]
及以后 - 即它们将基于它们在从电子表格字段中提取的数组中的顺序。抱歉啰嗦。如果我将虚拟内容放在它工作的变量中并发送pdf,那么实际的机制就可以了,但我的e.values
无效。
这是我的脚本 //完成证书
//从Google文档中获取模板并将其命名为
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);
//告诉脚本进入doc
var copyBody = copyDoc.getBody();
//使用提交的表单中的数据替换doc中的占位符
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); }
答案 0 :(得分:0)
您是否尝试过使用命名值。
下面是一个例子
var handling = Number(e.namedValues["Call Handling"]);
var security = Number(e.namedValues["Security"]);
var agentName = String(e.namedValues["Agent Name"]);
这些是我所拥有的形式的问题。 e.namedValues [" text here"])之后的位; ,将此处的文本替换为表单响应中调用的列,这将是问题名称。
我不确定为什么e.values [0]以后不适合你,因为它适用于我。
我的脚本位于电子表格中,通过菜单安装了onFormSubmit触发器。
另外请记住,为了测试你的剧本,你必须在一个表格上进行汇总,点击播放按钮不会起作用,因为没有事件传递给你的功能。