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 可视化 API 参考:

为每一列分配一个数据类型...每一列中的所有数据必须具有相同的数据类型。

这里的问题是数据表中的前导空白。当您创建 aDataTable时,type从第一行数据推测列的 ,然后假定所有后续行都是相同类型。在您的电子表格中,G2 为空白,这导致列类型为string。但是,G 列中的其余值属于 类型number

原始电子表格的插图

在此示例中,删除空白行 2 后仍然会出现问题。看到 A3 是类型字符串,而 A4 是类型编号 - 任何尝试使用此范围的可视化都会抱怨类型不匹配。

因此,请确保您没有以空白值开始任何列,并确保您的类型在列内是一致的,您应该没问题。


评论中的其他提示:

  • 您可以使用电子表格中的格式控件或以编程方式使用setNumberFormat("@STRING@"). 这在您不打算将其可视化为数字的列中会很好 - 例如,您的列 L 包含文本和数字的混合。但是,如果您正在考虑要绘制图表的列(例如在折线图中),那么转换为纯文本将是一个坏主意 - 它会阻止您执行可视化。
于 2013-01-03T02:53:22.153 回答