我有一个Google Apps脚本,该脚本在其附加到的电子表格中部署了可变数量的表格,目的是从API中收集数据,该数据工作正常。
但是,我想在图表中可视化这些数据,并且由于它是可以自欺欺人的,并且由于这些数据表的数量有可变,所以我想创建许多代表代表该数据的各个部分的图表数据,在这些图表中,每个数据表都有一个范围(系列或Y轴(,因此根据初始化或设置,它的变量是可变的。
长话短说,为了减少混乱,我只是想知道如何创建图表并为每个图表添加范围。例如,我可以迭代列表,但问题是我遇到了这样的错误:" TypeError:在Object EmbeddedChartBuilder中找不到修改函数。(第97行,文件"代码"(解雇"
另外,请注意,我正在尝试从其他床单中获取数据,所以我使用的是sheetname!range note。
这是我正在从事的特定功能,请注意我正在使用占位符值,只是为了使某些东西现在正常工作。
// TODO
function createCharts(){
var sheet = getSheet('Graphs');
var winrateChart = sheet.newChart().setChartType(Charts.ChartType.LINE).setPosition(2, 1, 0, 0);
// for every user, add appropriate range to chart
winrateChart = winrateChart.modify().addRange('username1!A1:B2');
winrateChart = winrateChart.modify().addRange('username2!A1:B2');
sheet.updateChart(winrateChart);
winrateChart = winrateChart.build()
sheet.insertChart(winrateChart);
}
我已经弄清楚了问题是什么,主要是通过实验,我仍然认为文档缺乏清晰度和良好的例子。但这是我的理解。
首先,对于此问题,表格,嵌入式和嵌入式布置者,有三个类要处理。
embeddedChartBuilder是Sheet.Newchart((返回的,通过使用.build((方法,您获得了一个embeddedchart类,可以用作sheet.insertchart((的参数。此外,通过实验,您似乎必须通过egept.insertchart(嵌入式(插入图表,然后才能使用embeddedchart.modify((,后者又返回了嵌入式的嵌入式构建器,您可以将其用于链接任何数量的方法,例如添加范围。当然,您仍然必须使用.build((以从嵌入式的Chartbuilder中返回嵌入式式,然后sheet.updatechart(embeddedchart(之后。
最后一个问题是我犯了一个错误,我使用字符串作为参数来调用.addrange((,但是Addrange需要一个范围对象。
无论如何,这是一些演示示例使用的代码,您可以根据需要将尽可能多的修改((链链,例如在循环中通过板进行迭代。
注意:getSheet是一个自定义功能,执行您的期望。
function createCharts(){
var sheet = getSheet('Graphs');
var chart = sheet.newChart().setChartType(Charts.ChartType.LINE).setPosition(2,1,0,0).build(); // build returns an EmbeddedChart object
Logger.log(chart);
sheet.insertChart(chart);
chart = chart.modify().addRange(getSheet('someSheetName').getRange('B1:B999')).build();
Logger.log(chart);
sheet.updateChart(chart);
}
编辑:这是整个工作功能,在此特定代码之外没有用,但是您可以看到其背后的逻辑,我将尝试通过遍历板或其他内容来使其普遍有用。
function createChart(range, x, y, title, width, height){
// range: string; x: int; y: int; title: string; width: int; height; int
// Creates a chart with data from all usernames for a given range at x row, y column, with a title, a width and height
var sheet = getSheet('Graphs');
// chart setup
var chart = sheet.newChart()
.setChartType(Charts.ChartType.LINE)
.setPosition(x,y,0,0)
.setNumHeaders(1)
.setOption('title', title)
.setOption('width', width)
.setOption('height', height)
.build();
sheet.insertChart(chart);
// for every username, add corresponding data into chart
for(var i = 0; i < fortniteUsernames.length; i++){
var username = fortniteUsernames[i];
chart = chart.modify().addRange(getSheet(username).getRange(range)).build();
sheet.updateChart(chart);
}
}