Google Apps Script技术问题:表单生成的docx文件如何发送给提交人
解决动态获取生成的Docx文件ID并作为邮件附件发送的问题
核心思路:在复制并填充Docx模板的流程中,直接捕获新生成文件的对象,无需硬编码固定ID,直接用该对象完成邮件附件的添加。
修改后的完整脚本示例
function autoFillGoogleDocsFromForm(e) { // 替换为你的模板文件ID和目标文件夹ID const templateId = "YOUR_TEMPLATE_DOC_ID"; const destinationFolderId = "YOUR_DESTINATION_FOLDER_ID"; const formResponse = e.response; const itemResponses = formResponse.getItemResponses(); // 获取提交人邮箱(需表单开启"收集电子邮件地址") const respondentEmail = formResponse.getRespondentEmail(); // 提取表单字段值(根据你的实际字段索引/名称调整) const userName = itemResponses[0].getResponse(); // 示例:提取其他字段 // const userPhone = itemResponses[1].getResponse(); // 复制模板到目标文件夹,返回新文件对象 const newDocFile = DriveApp.getFileById(templateId).makeCopy(userName, DriveApp.getFolderById(destinationFolderId)); const doc = DocumentApp.openById(newDocFile.getId()); const body = doc.getBody(); // 替换模板中的占位符(根据你的模板实际内容调整) body.replaceText("{{姓名}}", userName); // body.replaceText("{{电话}}", userPhone); doc.saveAndClose(); // 发送邮件(仅当获取到提交人邮箱时执行) if (respondentEmail) { const emailSubject = `你的专属文档已生成:${userName}`; const emailBody = `您好,您提交表单对应的文档已生成,附件为您的文件,请查收。`; // 直接用新生成的文件对象作为附件,无需再通过ID查询 GmailApp.sendEmail(respondentEmail, emailSubject, emailBody, { attachments: [newDocFile] }); } }
关键说明
获取提交人邮箱
必须在Google表单设置中开启「收集电子邮件地址」,否则getRespondentEmail()会返回null。操作路径:表单 → 设置 → 勾选「收集电子邮件地址」。动态获取文件对象
makeCopy()方法执行后会直接返回新创建的File对象,你可以直接将其作为附件传入邮件,避免重复调用DriveApp.getFileById(),提升执行效率。权限与测试
- 第一次运行脚本时需要授权,确保授予脚本访问Google Drive和Gmail的权限
- 可通过表单提交测试数据,验证文件生成和邮件发送流程是否正常
注意事项
- 根据你的表单字段数量和模板占位符,调整字段提取和文本替换的代码
- 如果需要自定义邮件内容(比如插入更多表单数据),直接在
emailBody中拼接对应字段值即可
内容的提问来源于stack exchange,提问作者Gandy Des Ardy
相关产品推荐
相关产品推荐

