我正在使用带有电子表格的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;
}
你知道这个问题的解决方案吗?非常感谢任何帮助。
答案 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
希望有所帮助。