【问题标题】:Get as Image generates wrong image - Google App ScriptGet as Image 生成错误的图像 - Google App Script
【发布时间】:2020-05-27 08:24:09
【问题描述】:

我的目标是使用带有 google app 脚本的 google sheet 中的信息创建 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);

【问题讨论】:

    标签: javascript google-apps-script radar-chart


    【解决方案1】:

    这个答案怎么样?

    问题和解决方法:

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

    修改脚本:

    当你的脚本被修改时,请进行如下修改。

    从:
    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);
    
    • imageBlobDriveApp.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);
      

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-13
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多