此处的目标是在加载电子表格后,以编程方式根据预先存在的数据创建图表。
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。但事实并非如此。
最佳答案
以下代码对我有用,将 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() 方法调用它之前创建了图表。希望这会有所帮助。
关于google-apps-script - 使用 Apps 脚本创建图表无法插入电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702483/