如何在Google Apps脚本中使用多个范围为Google电子表格创建图表



我有一个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);    
  }
}

相关内容

最新更新