如何将基于模板生成的多份Google Docs文档合并为单个文档?
修改Google Apps Script实现批量生成内容合并到单个文档
以下是修改后的代码,可实现将所有从表格读取数据生成的内容合并到同一个Google Docs文档中:
function mergeToSingleDoc() { const templateId = "....."; // 替换为你的模板文档ID const targetFolderId = "...."; // 替换为要保存合并文档的文件夹ID const mergedDocName = "合并后的文档"; // 自定义合并文档的名称 // 创建合并用的主文档 const templateFile = DriveApp.getFileById(templateId); const mergedFile = templateFile.makeCopy(mergedDocName, DriveApp.getFolderById(targetFolderId)); const mergedDoc = DocumentApp.openById(mergedFile.getId()); const mergedBody = mergedDoc.getBody(); // 清空模板默认内容(不需要保留模板原有内容则保留此行,反之删除) mergedBody.clear(); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const lastRow = sheet.getLastRow(); for (let i = 9; i <= lastRow; i++) { // 读取表格对应行的数据 const a1 = sheet.getRange(i, 1).getValue(); const a2 = sheet.getRange(i, 2).getValue(); const a3 = sheet.getRange(i, 3).getValue(); // 创建临时模板副本用于替换内容 const tempFile = templateFile.makeCopy("临时文档", DriveApp.getFolderById(targetFolderId)); const tempDoc = DocumentApp.openById(tempFile.getId()); const tempBody = tempDoc.getBody(); // 替换模板中的占位符 tempBody.replaceText("{......}", a1); tempBody.replaceText("{.....}", a2); tempBody.replaceText("{....}", a3); // 将临时文档的内容复制到主文档 const elements = tempBody.getChildren(); for (let j = 0; j < elements.length; j++) { mergedBody.appendParagraph(elements[j].copy()); } // 每个条目后添加分页符(不需要分隔页面则删除此行) mergedBody.appendPageBreak(); // 清理临时文件 tempDoc.saveAndClose(); tempFile.setTrashed(true); } // 保存并关闭合并后的文档 mergedDoc.saveAndClose(); }
关键修改说明
- 先创建合并主文档:基于模板复制生成,后续所有内容都追加到这个文档中
- 循环内仅生成临时文档:用于完成数据替换,内容复制到主文档后直接删除,避免生成大量独立文件
- 内容分隔:每个条目复制完成后添加分页符,让不同内容在独立页面展示(不需要则删除分页符代码)
- 模板内容清理:如果不需要保留模板原有内容,保留
mergedBody.clear();,反之删除该行
注意事项
- 替换代码中的
templateId和targetFolderId为你自己的文档/文件夹ID - 自定义
mergedDocName为你需要的合并文档名称 - 确保代码中的占位符
{......}、{.....}、{....}与模板中的占位符完全一致
内容的提问来源于stack exchange,提问作者Татьяна Со
相关产品推荐
相关产品推荐

