Javascript 如何在google电子表格的google apps脚本中创建具有多个范围的图表
我有一个GoogleApps脚本,它在它所附的电子表格中部署了数量可变的工作表,目的是从API收集数据,这很好 但是,我想将这些数据可视化为图形,因为它是自责的,而且因为这些数据表的数量可变,我想创建一些图表来表示数据的各个部分,在这些图表中,每一页数据都有一个范围(系列或y轴),所以它是可变的,取决于初始化或设置 长话短说,为了减少混淆,我只想知道如何创建图表并为每个图表添加范围。例如,我可以遍历一个列表,但问题是我遇到了如下错误: TypeError:在对象EmbeddedChartBuilder中找不到函数modify。(第97行,文件“代码”) 解雇” 另外,请注意,我试图从其他工作表中提取数据,所以我使用了sheetName!范围表示法 这是我正在处理的特定函数,请注意,我使用占位符值只是为了让某些东西暂时工作Javascript 如何在google电子表格的google apps脚本中创建具有多个范围的图表,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个GoogleApps脚本,它在它所附的电子表格中部署了数量可变的工作表,目的是从API收集数据,这很好 但是,我想将这些数据可视化为图形,因为它是自责的,而且因为这些数据表的数量可变,我想创建一些图表来表示数据的各个部分,在这些图表中,每一页数据都有一个范围(系列或y轴),所以它是可变的,取决于初始化或设置 长话短说,为了减少混淆,我只想知道如何创建图表并为每个图表添加范围。例如,我可以遍历一个列表,但问题是我遇到了如下错误: TypeError:在对象EmbeddedChartBuil
// 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);
}
我已经找出了问题所在,主要是通过实验,我仍然认为文档缺乏清晰性和良好的示例。 但这是我的理解 首先,这个问题需要处理三个类:Sheet、EmbeddedChart和EmbeddedChartBuilder EmbeddedChartBuilder是Sheet.newChart()返回的内容,通过使用.build()方法可以获得EmbeddedChart类,该类可以用作Sheet.insertChart()的参数。 此外,通过实验,您似乎必须在使用EmbeddedChart.modify()之前逐个插入一个图表。EmbeddedChart(EmbeddedChart),而EmbeddedChart.modify()反过来会返回一个EmbeddedChartBuilder,您可以使用它来链接任意数量的方法,例如add range。当然,您仍然需要使用.build()从EmbeddedChartBuilder返回EmbeddedChart,然后使用Sheet.updateChart(EmbeddedChart) 最后一个问题是我犯了一个错误,我使用字符串作为参数调用.addRange(),但是addRange需要一个Range对象 无论如何,这里有一些代码演示了一个示例用法,您可以根据需要链接任意多个modify(),例如在循环中遍历工作表 注意: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);
}
}
函数createChart(范围、x、y、标题、宽度、高度){
//范围:字符串;x:int;y:int;标题:字符串;宽度:int;高度;int
//创建一个图表,其中包含给定范围内x行y列的所有用户名的数据,并带有标题、宽度和高度
var sheet=getSheet(“图”);
//图表设置
var chart=sheet.newChart()
.setChartType(Charts.ChartType.LINE)
.设定位置(x,y,0,0)
.setNumHeaders(1)
.setOption('title',title)
.setOption('width',width)
.setOption('height',height)
.build();
表.插入图表(图表);
//对于每个用户名,将相应的数据添加到图表中
for(变量i=0;i
与其使用多行,不如使用winrateChart=winrateChart.modify().addRange('username1!A1:B2').addRange('username2!A1:B2').build()编码>然后用它更新工作表?这不起作用,因为我需要设置一个循环,循环遍历工作表名称,这样我就可以从每个工作表中提取数据。就像我说的,床单的数量是可变的。在伪代码中是这样的。对于sheetList中的每个工作表,将工作表的数据添加到图表您向我们显示的代码的哪一行是第97行
?winrateChart=winrateChart.modify().addRange('username1!A1:B2');我发现了问题(部分,仍然没有找到完整的解决方案,我休息了一下,因为我整天都在编码),EmbeddedChart类包含方法modify,但是EmbeddedChartBuilder类没有,我开始弄清楚这里的机制是什么,EmbeddedChartBuilder看起来像是用来修改图表和做其他事情的,而build方法似乎将其放入另一个类中,该类是用于显示图表本身的对象。EmbeddedChart的modify()返回一个EmbeddedChartBuilder,可用于修改此图表。调用sheet.updateChart(图表)保存任何更改。EmbeddedChartBuilder的build()返回EmbeddedChart-创建的图表,它仍然必须添加到电子表格中。我认为文档有点混乱,但我开始弄清楚它。