Javascript 获取为图像生成错误的图像-谷歌应用程序脚本

Javascript 获取为图像生成错误的图像-谷歌应用程序脚本,javascript,google-apps-script,radar-chart,Javascript,Google Apps Script,Radar Chart,我的目标是使用带有谷歌应用程序脚本的谷歌工作表中的信息创建谷歌文档 我可以从谷歌表格中的数据生成雷达图。雷达图如下所示: 问题是:当我将图表作为图像粘贴到谷歌文档时。看起来完全错了。请参阅图片和代码 我的代码: var chart = sheet.newChart() .setChartType(Charts.ChartType.RADAR) .setPosition(8,2,0,0) .setNumHeaders(1) .setOption('title', tit

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

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

问题是:当我将图表作为图像粘贴到谷歌文档时。看起来完全错了。请参阅图片和代码

我的代码:

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

我最近发现的类似帖子是:

但没有给出答案。希望有人能帮忙

编辑: 多亏了塔奈克,它现在起作用了。对于任何想知道的人,这是我用来生成图表并将其插入google文档的脚本。用图表替换文本

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);
var chart=sheet.newChart()
.setChartType(图表.图表类型.雷达)
.设置位置(8,2,0,0)
.setNumHeaders(1)
.setOption('title',title)
.addRange(表.getRange(“A1:G1”))
.addRange(sheet.getRange(“A2:G2”))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_行)
.setTransportSerowsandColumns(真)
.setOption('vax',{0:{viewWindow:{min:0,max:100})
.setOption('series',{0:{lineWidth:4,color:'#FFA500'})
.build();
表.插入图表(图表);
//塔奈克解决方案
常量幻灯片=幻灯片应用程序创建(“临时”);
const image=slides.getSlides()[0].insertSheetsChartAsImage(图表).getAs(“image/png”);
DriveApp.getFileById(slides.getId()).setTrashed(true);
var item=doc.getBody().findText(“”);
var r=item.getElement();
r、 asText().SETEXT(“”);
var img=r.getParent().Aspatraph().insertInlineImage(0,图像);
这个答案怎么样

问题和解决方法: 我认为这可能是一个错误。在本例中,作为一种解决方法,我使用了一个谷歌幻灯片,它可以直接将使用谷歌电子表格创建的图表放入其中。当从放在谷歌幻灯片上的图表中检索blob时,blob与谷歌电子表格上的chrat相同

修改脚本: 修改脚本时,请按以下方式修改

  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);
发件人: 致:
  • 当使用
    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);
    
参考:
  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);