如何从Google Apps脚本中的工作表中获取图表

时间:2017-03-15 20:54:44

标签: google-apps-script google-sheets google-visualization

我正在使用带有电子表格的Google Apps脚本。我试图找到一种方法来返回谷歌图表(静态或动态,无关紧要)。我将使用的数据集将显示在电子表格中,我希望以网络应用程序的形式返回Google图表(网址应以:script.google.com/macros/idforscript开头)。我尝试使用官方的Google Apps脚本教程,但即使它们不起作用,当我打开页面时,在红色矩形中出现 [400] 错误时,我也会离开。这是我正在使用的代码:

  function doGet() {
  /*
  var data = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, 'Month')
      .addColumn(Charts.ColumnType.NUMBER, 'In Store')
      .addColumn(Charts.ColumnType.NUMBER, 'Online')
      .addRow(['January', 10, 1])
      .addRow(['February', 12, 1])
      .addRow(['March', 20, 2])
      .addRow(['April', 25, 3])
      .addRow(['May', 30, 4])
      .build();
      */
  var data = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1PPlSIiQ7fZ5AzcyB61iVmIBQQepm6vubd4S2Eo9fWOg/edit#gid=0").getSheets()[0];


  var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build();
  var uiApp = UiApp.createApplication().setTitle('My Chart');
  uiApp.add(chart);
  return uiApp;

}

你知道这个问题的解决方案吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

错误的原因是newCharts()。build()函数返回一个embeddedChart对象:

var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build();

如上所述:https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder#build()

但是,对于UiApp,您需要一个图表对象,您应该能够使用嵌入的Chart对象的setId()方法获得该图表。不幸的是,使用该方法会引发此错误:“禁止访问类”图表“禁止”错误。可以跟踪此问题here

请注意,自2014年以来,UiApp已被弃用,因此不建议用于新项目。

现在寻求解决方案和一些好消息:)。您将在下面找到一个修改后的代码,该代码将与embeddedChart一起使用,为您提供webPage上的静态图表。

试试这个:

function doGet() {
  /*
  var data = Charts.newDataTable()
      .addColumn(Charts.ColumnType.STRING, 'Month')
      .addColumn(Charts.ColumnType.NUMBER, 'In Store')
      .addColumn(Charts.ColumnType.NUMBER, 'Online')
      .addRow(['January', 10, 1])
      .addRow(['February', 12, 1])
      .addRow(['March', 20, 2])
      .addRow(['April', 25, 3])
      .addRow(['May', 30, 4])
      .build();
      */
  var data = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1PPlSIiQ7fZ5AzcyB61iVmIBQQepm6vubd4S2Eo9fWOg/edit#gid=0").getSheets()[0];


  var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build();
  var blob = chart.getBlob().setContentType('image/jpeg');
  var bytes = blob.getBytes();
  var base64String = Utilities.base64Encode(bytes);
  var html = '<img src="data:' + blob.getContentType() + ';base64,' + base64String + '"/>';
  return HtmlService.createHtmlOutput(html)
}

自2014年起,UiApp已被弃用。因此,您必须使用HTML服务来创建内容。 https://developers.google.com/apps-script/reference/ui/ui-app

希望有所帮助。