このコードをクライアントサイドの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}"
これを数時間デバッグしようとしています。誰でも助けてもらえますか?
感謝の気持ちトンサンディ.. Plzは、ソースhtmlでJSON.stringify()を、アプリケーションスクリプトでJSON.parse()を追加することを忘れないでください。パース配列は直接動作しません。 – Maddy