0

图表服务的新手,希望能详细说明这篇文章Google 图表对象错误

我遇到了同样的“对象类型与列类型不匹配”的问题,但我检查了行并确保数据是相同的类型。如果我将整个工作表设置为纯文本格式,则图形执行正确且没有错误;但我放弃了所有使用航班日期或尝试汇总航班时间的过滤器和功能,并计算工作簿中其他工作表上的航班类型。

有没有办法让图表在使用之前将列数据串起来?(简单地)。我什至将数据范围设置为不包括字符串标题,以防万一出现问题,但这也不起作用。

样本数据表链接:样本数据表

这是代码:

      function doGet(){
    //Get the data from spreadsheet
    var ss = SpreadsheetApp.openById(ScriptProperties.getProperty('hoistLog'));
    var sheet = ss.getSheetByName('Flight Tracking');
    var data = sheet.getDataRange();

    //Filters
    var unitFilter = Charts.newCategoryFilter()
    .setFilterColumnIndex(22)
    .build();

    var missionTypeFilter = Charts.newCategoryFilter()
    .setFilterColumnIndex(2)
    .build();

    //Charts
    var missionTypePieChart = Charts.newPieChart()
    .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([2]))
    .setDimensions(550, 350)
    .setTitle('Mission Types')
    .set3D()
    .build();

    var unitTypePieChart = Charts.newPieChart()
    .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([22]))
    .setDimensions(550, 350)
    .setTitle('Flights By Unit')
    .set3D()
    .build();

    var tableChart = Charts.newTableChart()
    .setDataViewDefinition(Charts.newDataViewDefinition().setColumns([0, 2, 22, 23, 24, 25,     33, 34, 35, 36, 37]))
    .setDimensions(1100, 500)
    .build();

    //Dasboard
    var dashboard = Charts.newDashboardPanel().setDataTable(data)
    .bind([unitFilter, missionTypeFilter], [missionTypePieChart, unitTypePieChart,   tableChart])
    .build();

    var app = UiApp.createApplication();
    var filterPanel = app.createHorizontalPanel();
    var chartPanel = app.createHorizontalPanel();
    var tablePanel = app.createVerticalPanel();
    filterPanel.add(unitFilter).add(missionTypeFilter).setSpacing(10);
    chartPanel.add(missionTypePieChart).add(unitTypePieChart).setSpacing(10);
    tablePanel.add(tableChart).setSpacing(10);

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

提前谢谢...

4

3 回答 3

1

问题出在 line var dashboard = Charts.newDashboardPanel().setDataTable(data), data 在这里是一个范围。你需要以某种方式转换它:

//Dasboard
var vals=data.getValues();
var dataTable=Charts.newDataTable();
for (var i in vals[0]) {
  dataTable.addColumn (Charts.ColumnType.STRING, ""+i);
}
for (var i in vals) {
  var x=vals[i];
  for (var j in x) {
    x[j]=""+x[j];
  }  
  dataTable.addRow (vals[i]);
}  
var dashboard = Charts.newDashboardPanel().setDataTable(dataTable)
.bind([unitFilter, missionTypeFilter], [missionTypePieChart, unitTypePieChart,   tableChart])
.build();

然后它会显示一些东西。但是,可以采用转换来更适合您的表格(这里所有内容都只是转换为字符串,并且标题只是 0, 1, 2...)

于 2013-01-04T19:55:06.600 回答
0

我发现即使在添加了数据的新创建的电子表格上:

var data = sheet.getDataRange();

没有工作。

我改为命名范围并按名称指定它以将数据范围限制为输入的数据:

var data = ss.getRangeByName("theData");

它似乎在我认为.getDataRange会限制的预期数据范围之外找到一些东西。

于 2013-05-02T09:39:41.460 回答
0

如果工作表中的日期列包含一些空白,请打开工作表并将这些列格式化为“数字 > 纯文本”,以防止出现“对象类型与列类型不匹配”错误。

于 2013-06-13T06:49:57.813 回答