获取图像生成错误图像 - Google App Script

Bob*_*Bob 4 javascript google-apps-script radar-chart

我的目标是使用谷歌应用程序脚本的谷歌工作表中的信息创建谷歌文档。

我可以根据谷歌表格中的数据生成雷达图。雷达图如下所示:

雷达图看起来一切都很好

问题:当我将图表作为图像获取并将其粘贴到谷歌文档时。看起来一切都错了。看图片和代码。

雷达图不太好看

我的代码:

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');

Run Code Online (Sandbox Code Playgroud)

我发现的最新类似帖子是这个: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);
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 6

这个答案怎么样?

问题和解决方法:

我认为这可能是一个错误。在这种情况下,作为解决方法,我使用 Google Slides,它可以直接放置用 Google Spreadsheet 创建的图表。当从放入 Google 幻灯片的图表中检索该 Blob 时,该 Blob 与 Google 电子表格上的图表相同。

修改后的脚本:

当您的脚本修改时,请修改如下。

从:
var image = sheet.getCharts()[0].getBlob().getAs('image/png');
Run Code Online (Sandbox Code Playgroud) 到:
const slides = SlidesApp.create("temp");
const imageBlob = slides.getSlides()[0].insertSheetsChartAsImage(chart).getAs("image/png");
DriveApp.getFileById(slides.getId()).setTrashed(true);
DriveApp.createFile(imageBlob);
Run Code Online (Sandbox Code Playgroud)
  • imageBlob创建为DriveApp.createFile(imageBlob)文件时,可以获得以下结果。

结果:

imageimageBlob创建为文件时,分别获得左图像和右图像。

在此输入图像描述

笔记:

  • 如果您想使用此解决方法将正确的图表图像放入 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);
    
    Run Code Online (Sandbox Code Playgroud)

参考: