2016-04-10 30 views
0

このコードをクライアントサイドのHTMLに配置し、htmlテーブルを配列にエクスポートしてgapiに送信します。Google Appsスクリプトを使用して多次元配列をGoogleシートにパースする

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

Google Apps Script(コード実行可能ファイルとして公開)のコードで、この配列を解析してGoogleシートにセルを挿入します。

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

配列は、この

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

のように見えるここでの問題は、Googleがスクリプトは最初の行のみを移入し、配列の残りの部分を無視するアプリということです。つまり、["John","10","Lakeview","12345"]配列を最初の行に移入し、他のすべての配列を無視します。 私はクライアントのjavascriptでconsole.log()を有効にしていました。要求本体にgapiに渡されたときにすべての配列が含まれていることがわかりました。以下は上記の 'op'変数のconsole.log()です。

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

これを数時間デバッグしようとしています。誰でも助けてもらえますか?

答えて

0

のための3番目のパラメータ:

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

は、行の数です。あなたはそれが1に設定されている:

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

それはこのように設定する必要があります

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

最後のパラメータは、内部配列の長さを参照する必要があります。

rowという名前の配列は、OuterArrayのように変更されます。

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

感謝の気持ちトンサンディ.. Plzは、ソースhtmlでJSON.stringify()を、アプリケーションスクリプトでJSON.parse()を追加することを忘れないでください。パース配列は直接動作しません。 – Maddy

関連する問題