在EmbeddedChart中切换行和列

gla*_*oui 4 google-visualization google-sheets google-apps-script

我正在使用Google文档和Google Apps脚本为我们的sprint制作一些自动生成的报告.

我想在我的工作表中添加一个图表,一切正常,使用以下代码:

    var lChartBuilder = SpreadsheetApp.getActiveSheet().newChart();
    lChartBuilder.addRange(SpreadsheetApp.getActive().getRange("Tasks!C39:S40"));
    lChartBuilder.setOption("title", "Task Burndown");

    var lChart = lChartBuilder.asLineChart().build();
    SpreadsheetApp.getActiveSheet().insertChart(lChart);
Run Code Online (Sandbox Code Playgroud)

但是我的系列是水平组织的,而不是垂直的.在编辑器中我看到了选项"切换行/列"和另一个选项"使用列C作为标签"我尝试了很多选项(如lChartBuilder.setOption("reverseCategories", true);lChartBuilder.setOption("isStacked", true);),但它们似乎都与最后一个选项卡相关,我担心,而不是开始标签.

那么,有没有办法(除了转置我的数据)这样做,还是我必须手动触发图表编辑器来解决这个问题?

奖金问题:我如何设置(通过Google Apps脚本)第一行/列是标题并充当图例?

小智 6

对于奖金问题,我有你的奖金答案.创建/修改图表时使用此选项:

setOption('useFirstColumnAsDomain','true')
Run Code Online (Sandbox Code Playgroud)


Mog*_*dad 5

对于嵌入式图表,您需要转置数据,因为嵌入式图表使用电子表格数据,并且不支持转置本身.但是,您可以以编程方式处理此问题,并且转置操作本身很简单.

在下面的代码中,我假设存在一个名为"Scratch"的工作表,该工作表将用于存储转置数据的工作副本.您可以创建然后隐藏此工作表,这样就不会妨碍它.

// Uses 2D Arrays Library, see https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library

function buildChart() {
  var taskSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tasks");
  var lChartBuilder = taskSheet.newChart(); taskSheet.removeChart(chart)
  var srcData = taskSheet.getRange("Tasks!C39:S40").getValues();

  // Transpose the table (using 2D Array Library)
  var scratchData = ArrayLib.transpose(srcData);

  var numRows = scratchData.length;
  var numCols = scratchData[0].length; // assume all rows are same width

  // Write scratch values to scratch sheet.
  var scratchSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Scratch");
  scratchSheet.getRange(1, 1, numRows, numCols).setValues( scratchData );
  SpreadsheetApp.flush();

  lChartBuilder.addRange(scratchSheet.getDataRange());
  lChartBuilder.setOption("title", "Task Burndown");

  var lChart = lChartBuilder.asLineChart().setPosition(1, 1, 1, 1).build();
  taskSheet.insertChart(lChart);
};
Run Code Online (Sandbox Code Playgroud)

对于奖励......以这种方式格式化数据可确保第一行/列是标题并用作图例.

结果图表

现在,你还有一些问题需要解决.

  • 此代码每次运行时都会创建一个新图表,但您可能希望修改它.(相反,您需要更新转置数据,并修改图表以获取新范围(如果已更改).)
  • X轴不显示所有任务名称 - 您可以控制它.

你说你不想转置你的数据.不幸的是,目前的图表化身没有任何办法 - 你必须自己按摩你的数据.插入具有不同图表库的窗口小部件可能有效,但不推荐使用窗口小部件的窗口小部件支持.幸运的是,我已经有类似的代码了,所以它的工作量比看起来要少.您应该查看ArrayLib中的一些其他过滤功能,您可以使用它做很多事情.