如何从Google Spreadsheet提取数据生成Google Doc段落并回填文档链接
Google Apps Script 实现工作表转员工专属文档及链接回写方案
以下脚本可以同时实现你提到的两个需求:按员工生成专属Google Doc、自动回写文档链接到指定工作表。
完整可运行脚本
// 请修改以下配置参数为你自己的实际内容 const CONFIG = { sourceSheetName: '源数据工作表名', // 替换为你存放原始数据的工作表名称 linkSheetName: '链接回写工作表名', // 替换为你要存放文档链接的工作表名称 docSaveFolderId: '文件夹ID', // 替换为你要保存生成文档的Google Drive文件夹ID,打开文件夹后地址栏末尾的字符串就是ID docNamePrefix: '员工绩效文档_' // 生成文档的名称前缀,可自定义 } function generateEmployeeDocs() { const ss = SpreadsheetApp.getActiveSpreadsheet() // 读取源数据 const sourceSheet = ss.getSheetByName(CONFIG.sourceSheetName) const sourceData = sourceSheet.getDataRange().getValues() const headers = sourceData.shift() // 去掉表头行 // 按员工ID分组聚合数据 const employeeMap = new Map() sourceData.forEach(row => { const empId = row[headers.indexOf('Employee_ID')] if (!employeeMap.has(empId)) { employeeMap.set(empId, { id: empId, workerInfo: row[headers.indexOf('Worker information')], goals: [] }) } // 收集多条目标相关数据 employeeMap.get(empId).goals.push({ goal: row[headers.indexOf('Goal')], desc: row[headers.indexOf('Description')], selfEval: row[headers.indexOf('Self-Evaluation')], managerComment: row[headers.indexOf('Manager_Comment')] }) }) // 准备回写链接的数组 const linkOutput = [['Employee_ID', 'Worker information', '文档链接']] const saveFolder = DriveApp.getFolderById(CONFIG.docSaveFolderId) // 遍历每个员工生成文档 employeeMap.forEach(emp => { // 创建新文档 const doc = DocumentApp.create(`${CONFIG.docNamePrefix}${emp.id}`) const body = doc.getBody() // 写入固定员工信息 body.appendParagraph(`员工ID:${emp.id}`).setHeading(DocumentApp.ParagraphHeading.HEADING1) body.appendParagraph(`员工信息:${emp.workerInfo}`) body.appendParagraph('------------------------------') // 写入多条目标记录 emp.goals.forEach((goalItem, index) => { body.appendParagraph(`目标${index+1}:${goalItem.goal}`).setHeading(DocumentApp.ParagraphHeading.HEADING2) body.appendParagraph(`目标描述:${goalItem.desc}`) body.appendParagraph(`自我评价:${goalItem.selfEval}`) body.appendParagraph(`主管评价:${goalItem.managerComment}`) body.appendParagraph('') // 空行分隔不同目标 }) // 保存并移动文档到指定文件夹 doc.saveAndClose() const docFile = DriveApp.getFileById(doc.getId()) docFile.moveTo(saveFolder) // 开启Anyone with link可查看权限(可选,不需要可以注释掉) docFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW) const docUrl = docFile.getUrl() // 加入回写数组 linkOutput.push([emp.id, emp.workerInfo, docUrl]) }) // 回写链接到指定工作表 const linkSheet = ss.getSheetByName(CONFIG.linkSheetName) linkSheet.clear() // 清空原有内容,不需要可以注释掉 linkSheet.getRange(1, 1, linkOutput.length, linkOutput[0].length).setValues(linkOutput) SpreadsheetApp.getUi().alert(`生成完成,共生成${employeeMap.size}份员工文档,链接已回写完成`) }
使用步骤
- 打开你的Google Sheets表格,点击顶部菜单栏「扩展程序」>「Apps Script」进入脚本编辑器
- 删除编辑器中默认的代码,粘贴上面的完整脚本
- 按照注释修改
CONFIG配置项中的内容为你自己的实际参数 - 点击顶部保存按钮,给项目随意命名,然后选择
generateEmployeeDocs函数,点击运行按钮 - 首次运行需要进行权限授权,按照弹窗提示完成授权即可(如果提示「Google未验证应用」,点击「高级」>「前往[项目名]」即可继续)
- 运行完成后会弹出成功提示,回到表格即可看到指定工作表中已经填入了所有员工的文档链接
注意事项
- 运行脚本前请确保你对源数据表格、指定的文档保存文件夹拥有编辑权限
- 源数据的列名需要和脚本中写的列名(
Employee_ID、Worker information等)完全一致,否则会读取失败,如果你的列名有差异,请同步修改脚本中对应的列名字符串 - 如果不需要生成的文档默认开启所有人可查看权限,注释掉
docFile.setSharing那一行即可
内容的提问来源于stack exchange,提问作者Nadila
相关产品推荐
相关产品推荐

