You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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]
    });
  }
}

关键说明

  1. 获取提交人邮箱
    必须在Google表单设置中开启「收集电子邮件地址」,否则getRespondentEmail()会返回null。操作路径:表单 → 设置 → 勾选「收集电子邮件地址」。

  2. 动态获取文件对象
    makeCopy()方法执行后会直接返回新创建的File对象,你可以直接将其作为附件传入邮件,避免重复调用DriveApp.getFileById(),提升执行效率。

  3. 权限与测试

    • 第一次运行脚本时需要授权,确保授予脚本访问Google Drive和Gmail的权限
    • 可通过表单提交测试数据,验证文件生成和邮件发送流程是否正常

注意事项

  • 根据你的表单字段数量和模板占位符,调整字段提取和文本替换的代码
  • 如果需要自定义邮件内容(比如插入更多表单数据),直接在emailBody中拼接对应字段值即可

内容的提问来源于stack exchange,提问作者Gandy Des Ardy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:47:06