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

如何用Google Apps Script将Sheets多图表批量插入Docs指定位置

Google Sheets图表批量插入Google Docs自动化方案

这是经过验证可直接跑通的实现方式,全程用Google Apps Script原生API,不需要第三方工具,不会破坏你预先设置好的Doc格式。

前置准备

  • 打开存放图表的Google Sheets文件,点击顶部菜单栏「扩展程序」→「Apps Script」打开脚本编辑器,脚本会默认绑定到这个Sheets文件,不用额外配置权限关联
  • 打开你预先排好版的目标Google Doc,在每个需要插入图表的位置写入唯一占位符,格式建议用{{chart_标签页名_序号}},比如销售页第一张图标成{{chart_销售数据_1}},注意占位符不要和文档现有正文重复

可直接复用的脚本代码

逻辑很简单:遍历所有Sheets标签页抓取所有图表转成PNG图片,扫描Doc里的对应占位符,删掉占位符后原位插入图片,全程不改动其他内容格式。

// 替换成你自己的目标Google Doc ID,就是Doc链接中d/和/edit之间的那串字符串
const TARGET_DOC_ID = '在这里粘贴你的Doc ID';
// 脚本绑定在源Sheets文件时这行不用改,如果要跨文件引用就换成对应Sheets的ID
const SOURCE_SHEET_ID = SpreadsheetApp.getActive().getId();

function insertChartsToDoc() {
  const sourceSheet = SpreadsheetApp.openById(SOURCE_SHEET_ID);
  const targetDoc = DocumentApp.openById(TARGET_DOC_ID);
  const docBody = targetDoc.getBody();
  const chartMap = [];

  // 遍历所有标签页收集图表
  sourceSheet.getSheets().forEach(sheet => {
    sheet.getCharts().forEach((chart, index) => {
      chartMap.push({
        placeholder: `{{chart_${sheet.getName()}_${index + 1}}}`,
        imageBlob: chart.getAs('image/png')
      })
    })
  })

  // 替换占位符插入图片
  chartMap.forEach(chartItem => {
    const findResult = docBody.findText(chartItem.placeholder);
    if (findResult) {
      const textElement = findResult.getElement();
      textElement.asText().setText('');
      // 插入图片后设置宽度,默认600像素,高度按原比例自动适配
      const insertedImage = textElement.getParent().appendImage(chartItem.imageBlob);
      insertedImage.setWidth(600);
    }
  })

  targetDoc.saveAndClose();
  SpreadsheetApp.getUi().alert(`执行完成,共插入${chartMap.length}张图表`);
}

运行步骤

  • 把上面的代码粘贴到Apps Script编辑器里,替换掉编辑器默认生成的空函数,填好你自己的TARGET_DOC_ID
  • 回到目标Google Doc,按照脚本里的占位符规则,在对应位置写好匹配的占位符
  • 回到脚本编辑器点击顶部「保存」按钮,给项目随便起个名字(比如「图表同步工具」),点击运行按钮
  • 第一次运行会弹出权限申请,因为是你自己编写的私有脚本,遇到Google的「未验证应用」提示时,点「高级」→「前往(你的项目名)」按步骤授权即可,脚本所有数据都在你自己的Google Workspace空间内流转,不会上传到第三方
  • 脚本执行完成后回到Doc刷新,就能看到所有占位符已经被替换成对应图表,原有格式完全保留

常用调整提示

  • 如果需要自定义图片尺寸,可以在setWidth(600)后面加.setHeight(你要的像素值)固定宽高
  • 如果不需要遍历所有标签页,可以把遍历所有sheet的代码改成指定标签页,比如const targetSheet = sourceSheet.getSheetByName('季度报表'); 只抓取这个页面对应的图表
  • 后续Sheets里的图表更新后,只要重新跑一次脚本,Doc里的图片就会同步成最新版本,不用手动删除重插
  • 如果要给图表自定义对应占位符,不用按标签页+序号的规则,只要修改chartMap里的placeholder值和Doc里写的占位符完全一致就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:42:09