4

它在图表仪表板教程中说,仪表板可以绑定到 Google 电子表格范围作为数据源。但这没有在教程中演示,我也无法在Apps Script docs中找到相关信息。似乎 Datatable 不能绑定到电子表格范围,因为这些方法仅提供手动添加行和列。

有谁知道如何将仪表板绑定到 Google 电子表格的范围?

在我当前的代码中,我假设仪表板可以像这样绑定到 Google 电子表格中的一个范围,但是 setDataTable 函数调用让我很难过。

var ss = SpreadsheetApp.openById(spreadsheetId);
var data = ss.getRangeByName("DataWithColHeadings");
var dashboard = Charts.newDashboardPanel()
  .setDataTable(data) // throws error here! I think it is expecting a DataTableBuilder
  .bind([durationFilter, lineFilter], [pieChart, tableChart])
  .build();
4

4 回答 4

2

您可以使用点表示法指定数据范围:

var datasource = ss.getSheetByName("SheetName").getRange("A1:J20");

然后按如下方式使用它:

var dashboard = Charts.newDashboardPanel()
      .setDataTable(**datasource**)

以这种方式使用时,您可以消除指定列名和行值的代码。只需确保指定范围内的值一致且非空即可。

于 2012-11-25T20:05:45.277 回答
0

这相当于绑定到电子表格中命名范围的教程。命名范围包括列标题。

    function doGet() {
      var uiApp = UiApp.createApplication();
      var ssKey = "0At0FGJizRd-gdFo5bWZUUFRrUnRabENiRFdmT2o4WUE";
      var ss = SpreadsheetApp.openById(ssKey);
      var datasource = ss.getRangeByName("myRange").getValues();
      Logger.log(datasource);
      var data = Charts.newDataTable()
          .addColumn(Charts.ColumnType.STRING, datasource [0] [0])
          .addColumn(Charts.ColumnType.STRING, datasource [0] [1])
          .addColumn(Charts.ColumnType.NUMBER, datasource [0] [2])
          .addColumn(Charts.ColumnType.NUMBER, datasource [0] [3])
          for (i=1;i<=datasource.length-1;i++){
        Logger.log(datasource [i]);
        data.addRow([datasource [i] [0], datasource [i] [1], datasource [i] [2], datasource [i] [3]])
          };

      data.build();
      var ageFilter = Charts.newNumberRangeFilter()
          .setFilterColumnLabel("Age")
          .build();

      var genderFilter = Charts.newCategoryFilter()
          .setFilterColumnLabel("Gender")
          .build();

      var pieChart = Charts.newPieChart()
          .setDataViewDefinition(Charts.newDataViewDefinition()
                         .setColumns([0,3]))
          .build();

      var tableChart = Charts.newTableChart()
          .build(); 
      var dashboard = Charts.newDashboardPanel()
          .setDataTable(data)
          .bind([ageFilter, genderFilter], [pieChart, tableChart])
          .build();
      dashboard.add(uiApp.createVerticalPanel()
            .add(uiApp.createHorizontalPanel()
                 .add(ageFilter).add(genderFilter)
                 .setSpacing(70))
            .add(uiApp.createHorizontalPanel()
                 .add(pieChart).add(tableChart)
                 .setSpacing(10)));
      uiApp.add(dashboard);
      return uiApp;
    }
于 2012-08-20T05:26:25.273 回答
0

您还可以使用名为 .getDataTable() 的对象 RANGE 的 API 函数。下面的示例适用于我的两列多行工作表。

function doGet() {
   var uiApp = UiApp.createApplication().setTitle("My Dashboard");

   var dataRange = sheet.getDataRange();
   var dataTable = dataRange.getDataTable(true);

   var catFilter = Charts.newCategoryFilter()
       .setFilterColumnLabel("Category")
       .build();

   var chart = Charts.newPieChart()
       .build();

   var dashboard = Charts.newDashboardPanel()
       .setDataTable(dataTable)
       .bind([catFilter], [chart])
       .build();

   var panel = uiApp.createVerticalPanel()
     .add(chart)
     .add(catFilter);

   dashboard.add(panel);
   uiApp.add(dashboard);
   return uiApp;
}
于 2014-03-07T11:17:33.817 回答
0

附件是一个示例,其中 Applescript 直观地获取从谷歌电子表格第一张表的单元格 A1 开始的数据范围。

这是我的第一个 stackoverflow 答案,所以请提供反馈

我重新创建了为引用下面的电子表格而修改的 google piechart Applescript 仪表板教程:

    function doGet() {
    var uiApp = UiApp.createApplication();
    // type the SpreadsheetKey below within quotes for 
    // example "1MfXR_ELFevumQwEOjWneNL5j2M8aVLgELBOsS41LD5o"
    var ssKey = "1MfXR_ELFevumQwEOjWneNL5j2M8aVLgELBOsS41LD5o";
    var ss = SpreadsheetApp.openById(ssKey);
    var dataRange = ss.getDataRange();
    var data = dataRange.getDataTable(true);

    var ageFilter = Charts.newNumberRangeFilter()
        .setFilterColumnLabel("Age")
        .build();

    var genderFilter = Charts.newCategoryFilter()
        .setFilterColumnLabel("Gender")
        .build();

    var pieChart = Charts.newPieChart()
        .setDataViewDefinition(Charts.newDataViewDefinition()
        .setColumns([0,3]))
        .build();

    var tableChart = Charts.newTableChart()
        .build(); 

    var dashboard = Charts.newDashboardPanel()
        .setDataTable(data)
        .bind([ageFilter, genderFilter], [pieChart, tableChart])
        .build();  
    dashboard.add(uiApp.createVerticalPanel()
          .add(uiApp.createHorizontalPanel()
               .add(ageFilter).add(genderFilter)
               .setSpacing(70))
          .add(uiApp.createHorizontalPanel()
               .add(pieChart).add(tableChart)
               .setSpacing(10)));
    uiApp.add(dashboard);
    return uiApp;
    }
于 2015-02-28T05:36:24.227 回答