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