Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在google电子表格的google apps脚本中创建具有多个范围的图表_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如何在google电子表格的google apps脚本中创建具有多个范围的图表

Javascript 如何在google电子表格的google apps脚本中创建具有多个范围的图表,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个GoogleApps脚本,它在它所附的电子表格中部署了数量可变的工作表,目的是从API收集数据,这很好 但是,我想将这些数据可视化为图形,因为它是自责的,而且因为这些数据表的数量可变,我想创建一些图表来表示数据的各个部分,在这些图表中,每一页数据都有一个范围(系列或y轴),所以它是可变的,取决于初始化或设置 长话短说,为了减少混淆,我只想知道如何创建图表并为每个图表添加范围。例如,我可以遍历一个列表,但问题是我遇到了如下错误: TypeError:在对象EmbeddedChartBuil

我有一个GoogleApps脚本,它在它所附的电子表格中部署了数量可变的工作表,目的是从API收集数据,这很好

但是,我想将这些数据可视化为图形,因为它是自责的,而且因为这些数据表的数量可变,我想创建一些图表来表示数据的各个部分,在这些图表中,每一页数据都有一个范围(系列或y轴),所以它是可变的,取决于初始化或设置

长话短说,为了减少混淆,我只想知道如何创建图表并为每个图表添加范围。例如,我可以遍历一个列表,但问题是我遇到了如下错误: TypeError:在对象EmbeddedChartBuilder中找不到函数modify。(第97行,文件“代码”) 解雇”

另外,请注意,我试图从其他工作表中提取数据,所以我使用了sheetName!范围表示法

这是我正在处理的特定函数,请注意,我使用占位符值只是为了让某些东西暂时工作

// 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-创建的图表,它仍然必须添加到电子表格中。我认为文档有点混乱,但我开始弄清楚它。