Google apps script 图表和对象类型错误

Google apps script 图表和对象类型错误,google-apps-script,google-visualization,Google Apps Script,Google Visualization,我是海图服务的新手,希望能对这篇文章做更多的阐述 我遇到了相同的“对象类型与列类型不匹配”问题,但我检查了行并确保数据是相同的类型。如果我将整个工作表设置为格式纯文本,则图形执行正确且没有错误;但是我松开了所有使用航班日期的过滤器和函数,或者尝试对航班时间求和,并在工作簿的其他工作表上计算航班类型 有没有办法让图表在使用列数据之前对其进行字符串化?(简单地说)。我甚至将数据范围设置为不包含字符串头,以防万一这是问题所在,这也不起作用 链接到示例数据表: 代码如下: function

我是海图服务的新手,希望能对这篇文章做更多的阐述

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

有没有办法让图表在使用列数据之前对其进行字符串化?(简单地说)。我甚至将数据范围设置为不包含字符串头,以防万一这是问题所在,这也不起作用

链接到示例数据表:

代码如下:

      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;  
   }

提前感谢…

问题出在
var dashboard=Charts.newDashboardPanel()行。setDataTable(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…)

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

var data = sheet.getDataRange();
他没有工作

我取而代之的是命名范围并按名称指定,以将数据范围限制为输入的数据:

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

它似乎发现了超出预期数据范围的内容,我认为
。getDataRange
将限制为。

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