google-apps-script - 根据电子表格数据将图表添加到 Doc
问题描述
我正在尝试从工作表中获取数据,创建图表,复制模板文档并将图表插入副本。我的两个主要问题是每次创建两个新文档,另一个是我得到文本“InlineImage”而不是图表。谁能给我提示在哪里查找错误?先感谢您。
function openDialog() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var docTemplate = DriveApp.getFileById('1VhkAcoPhimYpYYwf_B-VqRXXUeOhp7Wkr0zLfT17GyA');
var destinationFolder = DriveApp.getFolderById('1htUiQeikzp-wuDgq0ybNyVhceVhf_cdT');
var range = sheet.getRange("B2:K15");
var chart = sheet.newChart()
.setChartType(Charts.ChartType.ORG)
.addRange(range)
.setPosition(5, 5, 0, 0)
.build();
var row = sheet.getSheetValues(2,1,1,1);
var copy = docTemplate.makeCopy(`${row} Family Tree`, destinationFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
var file = body.appendImage(chart);
body.replaceText('{{NewFamilyTreeChart}}', file);
解决方案
我试图复制您的代码并且脚本不会产生重复的文档。此外,您不能使用 replaceText 将字符串替换为图像。结果是“InlineImage”。您应该删除文本并使用 insertInlineImage()。
尝试这个:
function createChart(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var docTemplate = DriveApp.getFileById('xxidxx');
var destinationFolder = DriveApp.getFolderById('xxidxx');
var range = sheet.getRange("A1:B10");
var chart = sheet.newChart()
.setChartType(Charts.ChartType.ORG)
.addRange(range)
.setPosition(5, 5, 0, 0)
.build();
var row = "Test";
var copy = docTemplate.makeCopy(`${row} Data`, destinationFolder);
var doc = DocumentApp.openById(copy.getId());
var body = doc.getBody();
var text = body.findText("{{TestData}}");
if(text){
var r = text.getElement();
r.asText().setText("");
r.getParent().asParagraph().insertInlineImage(0, chart);
}
}
例子:
床单:
模板文件:
输出:
参考:
推荐阅读
- javascript - JS:如何获取所有可用 JS 事件的列表(并订阅它们)来记录它们?
- javascript - 工作日计数器跳过周末后的第一个星期一
- powerbi - 如何检查切片器中是否未选择任何值执行计算
- django - 在 Django Rest Framework 中将字段分解为自己的序列化程序
- javascript - 在 puppeteer 中单击链接后,如何等待完整的页面加载?
- node.js - Angular Universal 中的节点服务器
- python - 如何在一个窗口上绘制多个 FacetGrid?
- entity-framework-migrations - 如何遍历 EF Core 迁移中的实体?
- c++ - 我的成员函数旨在更改类中的特定成员数据实际上并没有更改它
- node.js - 无法在 MongoDB 中创建新对象