0

単純なスプレッドシートのグラフィック表現を作成しようとしていますが、「オブジェクトタイプが列のタイプと一致しません」というエラーが表示されます。

function doGet() {

  var ss = SpreadsheetApp.openById("xyz");

  var data = ss.getDataRange();

  var segFilter = Charts.newStringFilter().setFilterColumnIndex(6).build();
  var execFilter = Charts.newCategoryFilter().setFilterColumnIndex(7).build();

  var tableChart = Charts.newTableChart()
    .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([1,2,3,4,5,6,7,8,9,10,11,12,13]))
    .build();

  var dashboard = Charts.newDashboardPanel().setDataTable(data)
    .bind([segFilter, execFilter], [tableChart])
    .build();

  var app = UiApp.createApplication();
  var filterPanel = app.createVerticalPanel();
  var chartPanel = app.createHorizontalPanel();
  filterPanel.add(segFilter).add(execFilter).setSpacing(10);
  chartPanel.add(tableChart).setSpacing(10);

  dashboard.add(app.createVerticalPanel().add(filterPanel).add(chartPanel));
  app.add(dashboard);
  return app;
}

どうすればこれを修正できますか?

4

1 に答える 1

1

Google Visualization APIリファレンスから:

各列にはデータ型が割り当てられています...各列のすべてのデータは同じデータ型である必要があります。

ここでの問題は、データテーブルの先頭の空白です。を作成すると、列DataTabletypeforがデータの最初の行から推測され、後続のすべての行が同じタイプであると見なされます。スプレッドシートでは、G2は空白であり、その結果、列タイプはになりstringます。ただし、列Gの残りの値はタイプnumberです。

元のスプレッドシートのイラスト

この例では、空白の行2を削除した後も問題が発生します。A3は型文字列であり、A4は型番号であることがわかります。この範囲を使用しようとする視覚化では、型の不一致について文句を言います。

したがって、空白の値で列を開始しないようにし、列内でタイプが一貫していることを確認してください。問題がないはずです。


コメントからの追加のヒント:

  • スプレッドシートのフォーマットコントロールを使用するか、プログラムでを使用して、セルのデータ型をプレーンテキストに変更できますsetNumberFormat("@STRING@")。これは、数値として視覚化する予定のない列(たとえば、テキストと数値が混在する列L)では問題ありません。ただし、グラフ化する列(折れ線グラフなど)について考えている場合は、プレーンテキストに変換することはお勧めできません。視覚化を実行できなくなります。
于 2013-01-03T02:53:22.153 に答える