如何在Google Apps脚本中从工作表中获取图表 [英] How To Get Chart From Sheet in Google Apps Script

查看:513
本文介绍了如何在Google Apps脚本中从工作表中获取图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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;

}

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

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

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆