此处的目标是在加载电子表格时以编程方式从预先存在的数据创建图表。
documentation for the EmbeddedChart class有两个示例,都修改现有图表,并根据需要创建一个新图表:
function newChart(range, sheet){
var sheet = SpreadsheetApp.getActiveSheet();
var chartBuilder = sheet.newChart();
chartBuilder.addRange(range)
.setChartType(Charts.ChartType.Line)
.setOption('title', 'My Line Chart!');
sheet.insertChart(chartBuilder.build());
}
Google示例缺失: .setPosition()
我已尝试实现此功能,如下所示:
function makeChart(sheet, range) {
Logger.log('MAKING CHART');
var chart = sheet.newChart();
chart.addRange(range)
.setChartType(Charts.ChartType.BAR)
.setOption('title','I love Google Apps Script');
sheet.insertChart(chart.build());
}
将工作表和范围定义为:
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("C1:D16");
makeChart()
从onOpen()
调用,我可以看到正在执行。尽管如此,图表从未出现在电子表格中。
我注意到在调用.build()
方法后没有记录任何内容,但是关于这种方法的文档很少,除了声明必须在制作图表后调用它。
编辑:脚本失败,因为.insertChart()
需要EmbeddedChart
个对象,但会被EmbeddedChartBuilder
。根据文档,.build()
方法应返回EmbeddedChart。但事实并非如此。
答案 0 :(得分:4)
以下代码适用于我,显示A2:B8范围内的数据,作为工作表中嵌入的条形图。
function varSet(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRange = sheet.getRange("A2:B8");
buildChart(sheet, dataRange)
}
function buildChart(sheet, dataRange) {
var newChart = sheet.newChart()
.setChartType(Charts.ChartType.BAR)
.addRange(dataRange)
.setPosition(5, 5, 0, 0)
.build();
sheet.insertChart(newChart);
};
据我所知,唯一真正的区别是我已经指定了一个位置来插入图表以及在使用insertChart()方法调用图表之前创建图表。希望这会有所帮助。
答案 1 :(得分:3)
谷歌自己的例子:
https://developers.google.com/apps-script/reference/spreadsheet/embedded-chart
这两项都是错的。首先ChartType是'LINE'而不是'Line',其次它需要调用.setPosition,否则你得到一个关于'那些列超出界限'的错误。 @ samScholefield的回答是正确的。
请注意,在这样的结尾处链接'.build()'不起作用:
var chart = sheet.newChart();
chart.addRange(range)
.setChartType(Charts.ChartType.BAR)
.setPosition(5,5,0,0)
.setOption('title','I love Google Apps Script')
.build();
sheet.insert(chart);
它必须是这样的:
var chart = sheet.newChart();
chart.addRange(range)
.setChartType(Charts.ChartType.BAR)
.setPosition(5,5,0,0)
.setOption('title','I love Google Apps Script');
sheet.insert(chart.build());