0

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

답변

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].length7 동일하며, 루프가 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으로 사용하려고 할 때 "Object does not Mat Type"오류가 발생합니다. 데이터는 시트에 날짜 형식입니다. 데이터를 일반 텍스트로 사용하면 작동하지만 날짜 형식으로 사용할 수는 없습니다. – user3192133

+0

열의 모든 데이터는 동일한 유형이어야하며 지정한 열 유형과 일치해야합니다. 블랭크는 문자열로 해석됩니다. 이에 대한 자세한 내용은 [이 질문] (http://stackoverflow.com/questions/14132295) 및 [이 질문] (http://stackoverflow.com/questions/16712644). – Mogsdad

+0

열은 공백없이 채워지고 DATE로 지정됩니다. 아직도 그것을 가져 가지 않을 것이다. – user3192133