1

我查看了其他类似的帖子,并在正确设置触发器方面获得了一些帮助,但仍然有错误。
我试图自动发送一个 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); }
4

1 回答 1

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 触发器。

另请记住,要测试您的脚本,您必须提交一个表单,点击播放按钮将不起作用,因为没有事件可以传递给您的函数。

于 2016-03-23T13:09:21.027 回答