我正在尝试从Google电子表格创建条形图。我不想手动添加每个列和行,因此看起来这个示例应该可以工作并使用for循环自动执行该过程。
以下示例来自https://sites.google.com/site/appsscripttutorial/chart-services/bar-chart
错误显示“行有太多单元格。最多应该是列数。”
function doGet(){
//Get the data from spreadsheet
ssID ='SpreadsheetID';//Change it to yours
var SS = SpreadsheetApp.openById('ssID');
var sheet = SS.getSheets()[0];
var data = sheet.getRange('A1:G7').getValues();
//Build data table
var dataTable = Charts.newDataTable();
//Add Column types
dataTable.addColumn(Charts.ColumnType.STRING, data[0][0]);
for(var i=1; i<data[0].length-1; i++){
dataTable.addColumn(Charts.ColumnType.NUMBER, data[0][i]);
}
//Add rows
for(var j=1; j<data.length; j++){
dataTable.addRow(data[j]);
Logger.log(data[j])
}
//Create and build chart
var chart = Charts.newBarChart()
.setDataTable(dataTable)
.setTitle("Sales by store")
.build();
var app = UiApp.createApplication().setTitle("AST Chart");
app.add(chart)
return app;
}
答案 0 :(得分:2)
您选择了范围'A1:G7'
。这是7列7行。现在,您可以通过添加列来开始构建dataTable。
1:dataTable.addColumn(Charts.ColumnType.STRING, data[0][0]);
2-6:for(var i=1; i<data[0].length-1; i++)
请参阅data[0].length
等于7
,循环遍历1, 2, 3, 4, 5
,所有数字均小于6
。
然后,当您开始添加数据行时,dataTable中没有足够的列,您会看到错误。 (现在很清楚,不是吗?)
要修复它,请更改循环上限。
//Add Column types
dataTable.addColumn(Charts.ColumnType.STRING, data[0][0]);
for(var i=1; i<data[0].length; i++) {
dataTable.addColumn(Charts.ColumnType.NUMBER,data[0][i]);
}
...或遍历所有列,在循环内做出类型决定......
//Add Column types
for(var i=0; i<data[0].length; i++) {
if (i == 0) {
dataTable.addColumn(Charts.ColumnType.STRING,data[0][i]);
}
else {
dataTable.addColumn(Charts.ColumnType.NUMBER,data[0][i]);
}
}
......或同样的事情,但使用三元运算符来减少代码...
//Add Column types
for(var i=0; i<data[0].length; i++){
dataTable.addColumn(
i==0 ? Charts.ColumnType.STRING : Charts.ColumnType.NUMBER,
data[0][i]);
}
您可以通过许多其他方式执行此操作,但无论您选择哪种方式,只需确保覆盖所需的全部值即可。