使用GAS将图表图像从电子表格插入到文档中

时间:2014-01-20 16:26:23

标签: google-apps-script

电子表格中包含的我的脚本会创建一个新文档,并根据电子表格数据插入表格和段落。我还想从脚本中将图表(或这些图表的jpg图像)插入到Document中。这似乎是可能的,但不起作用。这是我的代码:

function insertChartImage(){
  var charts = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Score Card').getCharts();
  var chart = charts[0].getAs('image/png');  // similar result with 'gif'
  var doc = DocumentApp.openById(documentId);
  doc.getBody().appendImage(chart);          // similar result with insertImage()
}

结果是blank container结果(并且我已登录的课程)说“用户未登录”。

我已经广泛寻求文档,示例或教程,但没有任何运气。这一切都是可能的....似乎是一个基本的要求......能够在文档中包含图表,但也许这只是我?

我会非常感谢任何建议或指导我指出良好的文档。

最终的解决方案是重建图表。这是一个例子:

function insertBarChart(body) {   
  var values = SpreadsheetApp.getActive().getRange("Score!B2:D7").getValues();
  var dataTable = Charts.newDataTable()
        .addColumn(Charts.ColumnType.STRING, values[0][0])      
        .addColumn(Charts.ColumnType.NUMBER, values[0][1])      
        .addColumn(Charts.ColumnType.NUMBER, values[0][2])      
        .addRow(['Ownership', values[1][1], values[1][2]])   
        .addRow(['Control', values[2][1], values[2][2]])    
        .addRow(['Skills', values[3][1], values[3][2]])       
        .addRow(['Development', values[4][1], values[4][2]])   
        .addRow(['Social', values[5][1], values[5][2]])  
        .build(); 
  var chart = Charts.newColumnChart()      
    .setDataTable(dataTable)      
    .setColors(["green", "red"])      
    .setDimensions(600, 400)      
    .setXAxisTitle("Elements")      
    .setYAxisTitle("Points")      
    .setTitle("Profile")      
    .build();
  var scale = 0.5;
  var img = body.appendImage(chart.getAs('image/png'));
  img.setHeight(img.getHeight()*scale).setWidth(img.getWidth()*scale);
}

1 个答案:

答案 0 :(得分:0)

(2017年5月)Google似乎解决了这个问题。您的原始代码适用于我,不会产生空白容器:

function insertChartImage(){
  var charts = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Score Card').getCharts();
  var chart = charts[0].getAs('image/png');  // similar result with 'gif'
  var doc = DocumentApp.openById(documentId);
  doc.getBody().appendImage(chart);          // similar result with insertImage()
}