如何使用Google App脚本获取正确的组合图图像?

时间:2019-05-10 20:09:15

标签: google-apps-script

我有一个SpreadSheet模板,其中包含一个ComboChart,一个系列类型列,另一种类型行。

当我尝试使用Google Apps脚本导出图表时,导出的图像没有显示列(显示为一行)。

基本上,我打开工作表,特别是更改范围内的值,更新图表,然后将图表捕获为图像。

我的Google Apps脚本功能是这样:

var hardcodedData = {
  data:  [['Muy Bajo', 0.1, 20],
          ['Bajo', 0.2, 32],
          ['Medio Bajo', 0.15, 51],
          ['Medio', 0.05, 42],
          ['Medio Alto', 0.07, 30],
          ['Alto', 0.23, 15],
          ['Muy Alto', 0.2, 11]],
  fileId : 'id-of-spreadsheet-template'
}

function chartBuilder() {

  var hdd = hardcodedData.data;

  var sp = SpreadsheetApp.openById(hardcodedData.fileId);
  var sh = sp.getSheets()[0];
  sh.getRange('C2:D8').clearContent();

  var clasific = [];
  var ndvi = [];
  var has = [];
  for (var i = 0; i < hdd.length; i++) {
    ndvi    .push([hdd[i][1]]);
    has     .push([hdd[i][2]]);
  }
  sh.getRange(2, 3, 7, 1).setValues(ndvi);
  sh.getRange(2, 4, 7, 1).setValues(has);
  SpreadsheetApp.flush();

  var chart = sh.getCharts()[0];  
  sh.updateChart(chart);
  SpreadsheetApp.flush();

  chart = sh.getCharts()[0];

  var myimage = chart.getAs('image/gif');

  //fill document------------------------------------------
  var doc = DocumentApp.openById('id-of-document')
  doc.getBody().clear();
  var body = doc.getBody();
  body.appendParagraph("");

  body.insertImage(0, myimage)
}

是否可以像打开电子表格模板一样正确地打开和导出图表图像?

对不起,因为上下文不好,我没有发布图像的声誉。

2 个答案:

答案 0 :(得分:0)

将图表图像另存为png

function saveImage() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');//Sheet where your chart is
  var charts=sh.getCharts();
  var blob=charts[0].getAs('image/png');//just have one
  var folder=DriveApp.getFolderById('FolderId');//folder Id
  folder.createFile(blob).setName('Image Name');//Image name
}

答案 1 :(得分:0)

我遇到了类似的问题,它似乎好像Chart.getAs(contentType)方法忽略了为EmbeddedChart对象设置的某些样式和选项。

这不是一个完美的解决方案,但是我已经通过Slides Apps Script服务找到了一种解决方法,尽管它需要设置空白的“代理演示文稿”以通过图表。

Slide.insertSheetsChartAsImage(chart)将给您图表正确显示为幻灯片演示文稿中的图像,然后您可以从那里使用该图像。

function chartBuilder() {

  // ...

  var chart = sh.getCharts()[0];  
  sh.updateChart(chart);
  SpreadsheetApp.flush();

  chart = sh.getCharts()[0];

  // Insert sheets chart into slide as an embedded image
  var proxySaveSlide = SlidesApp.openById("my-blank-sheets-presentation").getSlides()[0];
  var chartImage = proxySaveSlide.insertSheetsChartAsImage(chart);

  // Get image from slides
  var myimage = chartImage.getAs('image/png');


  //fill document------------------------------------------
  var doc = DocumentApp.openById('id-of-document');
  doc.getBody().clear();
  var body = doc.getBody();
  body.appendParagraph("");

  body.insertImage(0, myimage);

 // Delete image in presentation slide
 chartImage.remove();
}

希望这会有所帮助!