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
相关产品推荐
相关产品推荐

