javascript - Get as Image 生成错误的图像 - Google App Script

标签 javascript google-apps-script radar-chart

我的目标是使用 google 表格中的信息和 google app script 来创建 google 文档。

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

radar chart looking all good

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

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时,可以得到如下结果。

结果:

imageimageBlob被创建为一个文件时,分别得到左图和右图。

enter image description here

备注:

  • 如果您想使用此解决方法将正确的图表图像放入 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/

相关文章:

google-apps-script - 使用Google脚本从地址数据中获取地理位置数据

c# - MS图雷达轴频

javascript - 使用 d3 的交互式蜘蛛图或雷达图

javascript - 是否可以使用 Apps 脚本运行 Google Sheets 插件?

google-apps-script - 如何使用应用程序脚本粘贴公式?

python - 如何在绘图中创建带有误差带的极坐标图?

javascript - 在本地系统工作,但在服务器上传时不工作

javascript - 如何执行单个 Struts 表单提交操作

javascript - 使用循环访问嵌套对象但有太多未定义?

javascript - 通过 ssl 调用 Javascript 函数