4

チャートダッシュボードのチュートリアルでは、ダッシュボードをデータソースとしてGoogleスプレッドシートの範囲にバインドできると書かれています。しかし、これはチュートリアルでは示されていませんでした。また、 AppsScriptのドキュメントで関連情報を見つけることもできませんでした。メソッドは行と列を手動で追加することしかできないため、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

添付の例は、Applescript が Google スプレッドシートの最初のシートのセル A1 から始まるデータ範囲を直感的に取得する例です。

これは私の最初のスタックオーバーフローの回答です。フィードバックをお寄せください

以下のスプレッドシートを参照するために変更された Google 円グラフ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 に答える
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 関数を使用することもできます。以下の例は、2 列、複数行のシートで機能します。

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 に答える