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

Google Apps Script实现:将多份表单生成文档合并至单一文档

用Google Apps Script实现表单提交内容合并到集中式文档

问题描述

我正在借助Google Apps Script实现任务自动化,现有场景是Google表单关联Google表格,员工提交表单后,现有脚本会把表格里的提交信息生成独立Google文档。目前方案运行正常,但想进一步优化:减少生成的文档数量,改为把每次新的表单提交内容合并到一份集中式Google文档中,让每位员工能在同一文档里查看自己的所有提交记录,不用在Drive里管理数十份独立文档。

想知道能不能通过Google Apps Script实现「将新生成的文档内容复制到集中文档后删除新文档」的方案?以下是当前未包含该功能的脚本:

function formtoDoc(e) {
  var callerName = e.values[1];
  var date = e.values[2];
  var disposition = e.values[3];
  var demographics = e.values[4];
  var employeeNotes = e.values[5];
  var callerResponse = e.values[6];
  var notesfromDemographics = e.values[7];
  var employeeName = e.values[8];
  var supervisorName = e.values[9];
  var templateFile = DriveApp.getFileById("1SkA-GYLq8lWjAJuUoj3l_EhS0ssv69pKmxg-Z-EBxXM");
  var templateResponseFolder = DriveApp.getFolderById("1XCUik_pVutA5QevjQgJPJHmM85CPTG5G");
  var copy = templateFile.makeCopy(callerName, templateResponseFolder);
  var doc = DocumentApp.openById(copy.getId());
  var body = doc.getBody();
  body.replaceText("{{Caller Name}}", callerName);
  body.replaceText("{{Date of Call}}", date);
  body.replaceText("{{Disposition}}", disposition);
  body.replaceText("{{Demographics}}", demographics);
  body.replaceText("{{Employee Notes}}", employeeNotes);
  body.replaceText("{{Caller Response}}", callerResponse);
  body.replaceText("{{Notes from Demographics}}", notesfromDemographics);
  body.replaceText("{{Employee Name}}", employeeName);
  body.replaceText("{{Supervisor Name}}", supervisorName);
  doc.saveAndClose();
}

实现方案:合并内容到集中文档并删除临时文档

完全可以实现该需求,修改后的脚本会先按原逻辑生成临时文档,将内容复制到指定的集中文档后,删除临时文档。具体修改如下:

function formtoDoc(e) {
  // 获取表单提交数据
  var callerName = e.values[1];
  var date = e.values[2];
  var disposition = e.values[3];
  var demographics = e.values[4];
  var employeeNotes = e.values[5];
  var callerResponse = e.values[6];
  var notesfromDemographics = e.values[7];
  var employeeName = e.values[8];
  var supervisorName = e.values[9];

  // 模板文件和临时文件夹配置
  var templateFile = DriveApp.getFileById("1SkA-GYLq8lWjAJuUoj3l_EhS0ssv69pKmxg-Z-EBxXM");
  var templateResponseFolder = DriveApp.getFolderById("1XCUik_pVutA5QevjQgJPJHmM85CPTG5G");
  
  // 生成临时文档并替换占位符
  var copy = templateFile.makeCopy(callerName, templateResponseFolder);
  var tempDoc = DocumentApp.openById(copy.getId());
  var tempBody = tempDoc.getBody();
  tempBody.replaceText("{{Caller Name}}", callerName);
  tempBody.replaceText("{{Date of Call}}", date);
  tempBody.replaceText("{{Disposition}}", disposition);
  tempBody.replaceText("{{Demographics}}", demographics);
  tempBody.replaceText("{{Employee Notes}}", employeeNotes);
  tempBody.replaceText("{{Caller Response}}", callerResponse);
  tempBody.replaceText("{{Notes from Demographics}}", notesfromDemographics);
  tempBody.replaceText("{{Employee Name}}", employeeName);
  tempBody.replaceText("{{Supervisor Name}}", supervisorName);
  tempDoc.saveAndClose();

  // 配置集中式文档(替换为你的集中文档ID)
  var centralDocId = "你的集中文档ID"; // 替换为实际的集中文档ID
  var centralDoc = DocumentApp.openById(centralDocId);
  var centralBody = centralDoc.getBody();

  // 复制临时文档内容到集中文档,添加分页符区分不同提交
  centralBody.appendPageBreak();
  var tempElements = tempBody.getParagraphs();
  for (var i = 0; i < tempElements.length; i++) {
    centralBody.appendParagraph(tempElements[i].copy());
  }

  // 保存集中文档并删除临时文档
  centralDoc.saveAndClose();
  DriveApp.getFileById(copy.getId()).setTrashed(true); // 移至回收站,需永久删除可改用delete()
}

关键说明

  • 集中文档ID:先创建空白Google文档,从文档URL中提取ID替换到centralDocId变量(URL中d/后的字符串即为ID)。
  • 内容分隔:脚本用appendPageBreak()添加分页符分隔不同提交,也可替换为appendHorizontalRule()添加水平线,或自定义标题增强区分度。
  • 临时文档处理:setTrashed(true)将临时文档移至回收站,方便测试后恢复;确认无需恢复可改用delete()永久删除。
  • 权限要求:确保脚本拥有访问集中文档和临时文件夹的权限,首次运行出现权限提示时按指引完成授权即可。

内容的提问来源于stack exchange,提问作者Michael Robinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:09:34