我的目标是使用 google 表格中的信息和 google app script 来创建 google 文档。
我可以根据 google 表格中的数据生成雷达图。雷达图如下所示:
问题:当我将图表作为图像获取并将其粘贴到谷歌文档时。看起来全错了。见图片和代码。
radar chart not so good looking
我的代码:
var chart = sheet.newChart()
.setChartType(Charts.ChartType.RADAR)
.setPosition(8,2,0,0)
.setNumHeaders(1)
.setOption('title', title)
.addRange(sheet.getRange("A1:G1"))
.addRange(sheet.getRange("A2:G2"))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
.setTransposeRowsAndColumns(true)
.setOption('vAxes',{0: {viewWindow: {min: 0, max: 100}}})
.setOption('series', {0: {lineWidth: 4, color: '#FFA500'}})
.build();
sheet.insertChart(chart);
var image = sheet.getCharts()[0].getBlob().getAs('image/png');
我发现的最近的类似帖子是这个:Automatting Radar Chart Generation in Google Doc using Google Apps Script
但那里没有给出答案。希望有人能帮忙。
编辑: 感谢 Tanaike 它现在正在工作。对于任何想知道的人,这是我用来生成图表并将其插入到谷歌文档中的脚本。用图表替换文本。
var chart = sheet.newChart()
.setChartType(Charts.ChartType.RADAR)
.setPosition(8,2,0,0)
.setNumHeaders(1)
.setOption('title', title)
.addRange(sheet.getRange("A1:G1"))
.addRange(sheet.getRange("A2:G2"))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)
.setTransposeRowsAndColumns(true)
.setOption('vAxes',{0: {viewWindow: {min: 0, max: 100}}})
.setOption('series', {0: {lineWidth: 4, color: '#FFA500'}})
.build();
sheet.insertChart(chart);
// workaround by Tanaike
const slides = SlidesApp.create("temp");
const image = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png");
DriveApp.getFileById(slides.getId()).setTrashed(true);
var item = doc.getBody().findText("<text-to-replace>");
var r = item.getElement();
r.asText().setText("");
var img = r.getParent().asParagraph().insertInlineImage(0, image);
最佳答案
这个答案怎么样?
问题和解决方法:
我认为这可能是一个错误。在这种情况下,作为一种变通方法,我使用了 Google Slides,它可以直接放置使用 Google Spreadsheet 创建的图表。当从放入 Google 幻灯片的图表中检索到 blob 时,该 blob 与 Google 电子表格上的图表相同。
修改后的脚本:
当您的脚本修改时,请修改如下。
从:var image = sheet.getCharts()[0].getBlob().getAs('image/png');
到:
const slides = SlidesApp.create("temp");
const imageBlob = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png");
DriveApp.getFileById(slides.getId()).setTrashed(true);
DriveApp.createFile(imageBlob);
- 用
DriveApp.createFile(imageBlob)
作为文件创建imageBlob
时,可以得到如下结果。
结果:
当image
和imageBlob
被创建为一个文件时,分别得到左图和右图。
备注:
如果您想使用此解决方法将正确的图表图像放入 Google 文档,请按如下方式修改。
const slides = SlidesApp.create("temp"); const imageBlob = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png"); DriveApp.getFileById(slides.getId()).setTrashed(true); // This script puts the retrieved image blob to the Google Document. DocumentApp.openById("### Document ID ###").getBody().insertImage(0, imageBlob);
引用:
关于javascript - Get as Image 生成错误的图像 - Google App Script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62038597/