如何在Google Apps脚本中从工作表中获取图表 [英] How To Get Chart From Sheet in Google Apps Script
问题描述
我正在使用Google Apps脚本和电子表格。我试图找出一种方式来返回一个谷歌图表(静态或动态,无所谓)。我将使用的数据集将放在电子表格中,我希望Google图表以网络应用程序的形式返回(网址应以script.google.com/macros/idforscript开头)。我试图使用官方的Google Apps脚本教程,但即使它们不起作用,当我打开页面时,仍留有红色矩形中的 [400] 错误。这里是我使用的代码:
函数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])$ b $ b .addRow(['February',12,1])$ b $ b .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(图表);
返回uiApp;
}
你知道这个问题的解决方案吗?任何帮助都非常感谢。
var chart = data.newChart()。setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1 :B3' ))建立();
正如此处所述: https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder#build()但是,对于UiApp,您需要一个图表对象,您应该可以使用嵌入的Chart对象的setId()方法获取图表对象。不幸的是,使用该方法会产生这样的错误:访问类Chart被禁止错误。可以跟踪此问题这里。
请注意UiApp自2014年起已被弃用,因此建议不要将其用于新项目。
现在为解决方案和一些好消息:)。下面你会发现一个修改后的代码,它可以和embeddedChart一起使用,为你的网页提供一个静态图表。
试试这个:
函数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])$ b $ b .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)
}
自所以你将不得不使用HTML服务来创建你的内容。
https://developers.google.com/apps- script / reference / ui / ui-app
希望有所帮助。
I am using Google Apps Script with Spreadsheets. I am trying to find out a way to return a Google Chart(static or dynamic, doesn't matter). The data set that I will be using will be in a spreadsheet, and I want the Google Chart to be returned in the form of a web app(URL should start with: script.google.com/macros/idforscript). I have tried to use the official Google Apps Script tutorials, but even they don't work, leaving me, when I open the page, with a [400] error in a red rectangle. Here is the code that I am using:
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;
}
Do you know the solution to this problem? Any help is greatly appreciated.
The reason for the error is newCharts().build() function returns a embeddedChart Object:
var chart = data.newChart().setChartType(Charts.ChartType.BAR).addRange(data.getRange('A1:B3')).build();
As mentioned here: https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart-builder#build()
However, for UiApp you need a chart Object which you should be able to get using setId() method of the embedded Chart object. Unfortunately, using that method raises this error: "Access to class "Chart" is prohibited" error. This issue can be tracked here.
Please also note UiApp has been deprecated since 2014, so not advisable to use for new projects.
Now for a solution and some good news :). Below you will find a modified code which will work with embeddedChart to give you a static chart on your webPage.
Try this:
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)
}
UiApp has been deprecated since 2014. So you will have to use HTML Service to create your content. https://developers.google.com/apps-script/reference/ui/ui-app
Hope that helps.
这篇关于如何在Google Apps脚本中从工作表中获取图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!