3

这听起来可能是一个愚蠢的问题,但我已经在网上搜索了很多,但我没有找到我想要的......

我已经设法从不同电子表格上的数据构建我想要显示的图表,并且我想将图表插入电子表格,而不必将数据粘贴到工作表上。这可能吗 ?

我也可以使用 UIApp 来显示它,但是我希望它显示在电子表格上,而不必从菜单或按钮中调用它。

谢谢你的帮助,

雪绒花

-- 到目前为止,这是我的代码,正如我在调试器工具上看到的那样,它正在工作

  function BuildMTChart(){
  var ss = SpreadsheetApp.getActiveSpreadsheet() 
  var DataChart = MTLastMonth()  // MTLastMonth() returns an array with the data I need
  var dSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Dashboard");

      var dataTable = Charts.newDataTable();
          dataTable.addColumn(Charts.ColumnType['DATE'], 'Date');
          dataTable.addColumn(Charts.ColumnType['NUMBER'], 'Maintenance');
          dataTable.addColumn(Charts.ColumnType['NUMBER'], 'Troubleshooting');
          for ( var i = 0; i < DataChart.length; i++) {
            dataTable.addRow([DataChart[i][0], DataChart[i][1], DataChart[i][2]]);
          }
          dataTable.build();        

    var chart = Charts.newAreaChart()
        .setDataTable(dataTable)         
        .setDimensions(800, 400)         
        .setYAxisTitle("Hours")
        .setXAxisTitle("Date")
        .build();
4

2 回答 2

3

EmbeddedChartBuilder曾经有setDataTable方法。但我无法让它工作。

据我了解,您可以从脚本将图表添加到电子表格中,但这些图表需要在电子表格本身中有数据:

var chart = workingSheet.newChart()
  .setChartType(Charts.ChartType.COLUMN)
  .setPosition(8, 2, 0, 0)
  .setTitle("Sample chart")
  .setXAxisTitle("...")
  .setYAxisTitle("...")
  .addRange(range)    // This could be smth. like SpreadsheetApp.getActiveSpreadsheet().getRange("B2:C8")
  .build();

SpreadsheetApp.getActiveSpreadsheet().insertChart(chart);

这里说你可以设置一些高级图表选项。也许还有一种方法可以在那里传递一个 DataTable ?

现在我建议使用您的数据填充电子表格,然后添加基于范围的图表。如果您不希望这些数据在 google 文档中可见,您可以隐藏列或将其移动到新工作表中。

于 2013-02-28T14:38:25.717 回答
0

也许您可以将其添加到 UiApp,适当调整大小并设置触发器,以便每次打开电子表格时都会显示 UI 应用程序?像这样的东西。

function onOpen() {
  return myUiApp();
}

function myUiApp() {
  //All your code to build the chart and add it to the app
}
于 2012-08-23T09:39:41.923 回答