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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:45:08