2016-04-10 12 views
0

Ich habe diesen Code auf einer Client-Seite HTML, HTML-Tabelle in Array zu exportieren und an Gapi übergeben.Analysieren mehrdimensionaler Arrays in Google-Blatt durch Google Apps Script

function exportGsheet() { 
    var myTableArray = []; 
    $("#table tr").each(function() { 
    var arrayOfThisRow = []; 
    var tableData = $(this).find('td'); 
    if (tableData.length > 0) { 
    tableData.each(function() { arrayOfThisRow.push($(this).text()); }); 
    myTableArray.push(arrayOfThisRow); 
    } 
    }); 

    var request = { 
     'function': 'setData', 
     'parameters': myTableArray, 
     'devMode': true // Optional. 
    }; 

    var op = gapi.client.request({ 
     'root': 'https://script.googleapis.com', 
     'path': 'v1/scripts/' + SCRIPT_ID + ':run', 
     'method': 'POST', 
     'body': request 
    }); 

    op.execute(); 
    window.open(gsheet); 
// alert(myTableArray) 
} 

Und dieser Code in Google Apps Script (als API ausführbaren veröffentlicht) dieses Arrays zu analysieren und die Zellen in google Blatt füllen.

function setData(e) { 
     var doc = SpreadsheetApp.openById(DOC_ID); 
     var sheet = doc.getSheetByName(SHEET_NAME); 
     var row = []; 
     for(var i = 0; i < e.length; i++) { 
     row.push(e[i]); 
     } 
    sheet.getRange(5, 2, 1, row.length).setValues([row]); 
} 

Die Arrays wie folgt aussieht

[["John","10","Lakeview","12345"],["Jill","8‌​","Tramble","12346"],["James","9","Paramount","12348"]] 

Das Problem hier ist, dass die Google Apps Script nur die erste Zeile auffüllt und ignoriert den Rest der Arrays. Bedeutet, es füllt ["John","10","Lakeview","12345"] Array in die erste Zeile und ignoriert alle anderen Arrays. Ich hatte console.log() im Client Javascript aktiviert und ich konnte sehen, dass der Anfragetext alle Arrays enthält, wenn es an gapi übergeben wird. Unten ist die console.log() von 'op' Variable oben.

body : "{"function":"setData","parameters":[["John","10","Lakeview","12345"],["Jill","8‌​","Tramble","12346"],["James","9","Paramount","12348"]],"devMode":true}" 

Versuchen, dies für mehrere Stunden zu debuggen. Kann mir bitte jemand helfen.

Antwort

0

Der 3. Parameter für:

getRange(start row, start column, number of Rows, number of columns) 

ist die Anzahl der Zeilen. Sie haben es auf eins gesetzt:

sheet.getRange(5, 2, 1, row.length).setValues([row]) 

Es muss wie folgt aufgebaut werden:

getRange(5, 2, data.length, data[0].length) 

Der letzte Parameter Referenz sollte eine innere Feldlänge.

Das Array, das jetzt row heißt, würde ich zu etwas wie OuterArray ändern.

var outerArray = []; 

for(var i = 0; i < e.length; i++) { 
    outerArray.push(e[i]); 
} 

sheet.getRange(5, 2, outerArray.length, outerArray[0].length).setValues(outerArray); 
+0

Funktioniert wie ein Charme .. Danke eine Tonne Sandy .. PLZ erinnern, JSON.stringify() in Quell-HTML und JSON.parse() in Apps-Skript hinzuzufügen. Parsing Arrays funktionieren nicht direkt. – Maddy

Verwandte Themen