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