0

我试图从谷歌电子表格创建条形图。我不想手动添加每一列和每一行,所以看起来这个例子应该可以工作,并用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; 
} 

回答

2

您已选择范围'A1:G7'。这是7列7行。现在,您可以通过添加列来开始构建数据表。

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

还有很多其他的方法可以做到这一点,但无论你选择,只要确保你全面涵盖您需要的值。

+0

谢谢。现在由于某种原因,当我尝试使用DATE作为ColumnType时,它会给出一个错误“对象与ColumnType不匹配”。数据在工作表上以日期格式显示。如果我有纯文本数据,它将起作用,但如果我将它作为日期格式,则不能。 – user3192133

+0

列中的所有数据必须是相同的类型,并且必须与您指定的列类型相匹配。空白被解释为字符串。更多关于[在这个问题](http://stackoverflow.com/questions/14132295)和[这个问题](http://stackoverflow.com/questions/16712644)。 – Mogsdad

+0

列填充无空格,并指定为DATE。仍然不会采取。 – user3192133