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

