我正在尝试为我的团队创建一份自动报告。我对编码有非常基本的了解,但不足以在出现问题或不起作用时真正排除故障或添加自己的代码。我非常感谢您提前提供的任何帮助。
当我的团队填写表格时,有一个电子邮件下拉问题,他们将在其中选择将 PDF 通过电子邮件发送到的位置,以便可以打印出来并签名。我需要脚本来识别并使用 C 列中的这封电子邮件来发送电子邮件和附加的 PDF。
我找到了这个视频,并按照步骤一步一步进行操作,除了他收集电子邮件并在电子表格中设置 pdf 链接的部分(在视频的“添加 PDF 链接”部分下)。
我的设置和他一模一样。此代码一直运行到电子邮件和附件部分,因为它从工作表中获取信息,使用文档模板创建临时文件,从临时文件创建 PDF,将 PDF 保存在正确的文件夹中,然后删除临时文件。但即使执行日志显示已完成,也不会发送任何电子邮件。
如果这太长了,我很抱歉,我试图做到彻底。
我尝试多次重新观看该视频,以确保我一步一步遵循说明,并且我的代码与他的代码匹配。我尝试用 Google 搜索解决方案并观看其他视频,但我的技能水平仅限于复制代码和进行细微更改,而不是故障排除或引入新代码。
**这是我到目前为止的代码: **
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
sendEmail(e.namedValues['email'][0],pdfFile);
}
function sendEmail(email, pdfFile){
GmailApp.sendEmail('email', "Subj", "Body", {
attachments: [pdfFile],
name: 'My Company'
});
}
// everything from here below works, use {} and '' instead of {{}} and "", use [0] instead of [1][2]etc.
function createPDF(info){
const pdfFolder = DriveApp.getFolderById("1YPB0_lw2QPw5bMrmrlw3_kcIchRGQmYG");
const tempFolder = DriveApp.getFolderById("1Um5h762rBmI-j_J8arTCmMoOEvEyKdIX");
const templateDoc = DriveApp.getFileById("1kN5DJqi04cY638B-0yKZYg-JHaLmt1jvv6kH25PjIgc");
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
body.replaceText("{timestamp}", info['Timestamp'][0]);
body.replaceText("{name}", info['name'][0]);
body.replaceText("{email}", info['email'][0]);
body.replaceText("{body}", info['body'][0]);
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
const pdfFile = pdfFolder.createFile(blobPDF).setName(info['name'][0] + " " + new Date());
tempFolder.removeFile(newTempFile);
}
**当前触发器设置: ** 部署:头 事件:来自电子表格 = 表单提交时 功能:表单提交后
**执行日志给我的上述代码的错误: ** 异常:无效参数:附件
at sendEmail(Code:12:12)
at afterFormSubmit(Code:5:3)
GmailApp.sendEmail('email', "Subj", "Body", {
处,email
不用作变量。这样就会发生错误。我想这可能是您当前问题**Error for the above code the Execution log gives me: ** Exception: Invalid argument: attachments
的原因。pdfFile
或 const pdfFile = createPDF(info);
未定义。因为函数 createPDF
没有返回值。当这些要点反映在你的脚本中时,就会变成如下所示。
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
sendEmail(e.namedValues['email'][0], pdfFile);
}
function sendEmail(email, pdfFile) {
GmailApp.sendEmail(email, "Subj", "Body", {
attachments: [pdfFile],
name: 'My Company'
});
}
function createPDF(info) {
const pdfFolder = DriveApp.getFolderById("1YPB0_lw2QPw5bMrmrlw3_kcIchRGQmYG");
const tempFolder = DriveApp.getFolderById("1Um5h762rBmI-j_J8arTCmMoOEvEyKdIX");
const templateDoc = DriveApp.getFileById("1kN5DJqi04cY638B-0yKZYg-JHaLmt1jvv6kH25PjIgc");
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
body.replaceText("{timestamp}", info['Timestamp'][0]);
body.replaceText("{name}", info['name'][0]);
body.replaceText("{email}", info['email'][0]);
body.replaceText("{body}", info['body'][0]);
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
const pdfFile = pdfFolder.createFile(blobPDF).setName(info['name'][0] + " " + new Date());
newTempFile.setTrashed(true);
return pdfFile;
}
在此修改后的脚本中,当提交 Google 表单时,将运行函数
afterFormSubmit
并创建 PDF 文件,并发送一封带有 PDF 文件附件的电子邮件。
在这种情况下,假设该函数包含在与 Google Form 链接的 Google Spreadsheet 的容器绑定脚本中。并且,功能
afterFormSubmit
已作为 OnSubmit 触发器安装。请注意这一点。