#JSON形式のデータでPOSTしてスプレッドシートに反映する
windows上で作成したエクセルデータの一部googleスプレッドシートにコピペして反映していました。
ちょっと面倒なので、jsonファイルを作成して、curlコマンドでサクッと更新するのが目的
(サーバーから、定期的に情報を自動的に反映することができるので、汎用性が高い)
##JSON形式のデータを用意
複数行で、複数項目を入力できるjson形式を策定
必要データから、下記のJSONに変換するプログラムは別途用意が必要
postするために用意したjson
{ "rows": [{"name":"JON","number":"1123","age":"20"}, {"name":"JIN","number":"2223","age":"23"}] }
##JSON形式のデータでPOSTで受信する(GAS)
gasのほうで、Post受信できるように作成
spreedsheetを用意しておきます。
*デプロイ作業が必要となります。
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString()); // jsonを分解
var value = params.rows; //配列
SHEET_ID=""
SHEET_NAME=""
var spreadsheet = SpreadsheetApp.openById(SHEET_ID);
var sheet = spreadsheet.getSheetByName(SHEET_NAME);
co=value.length; //データの行の数をチェック
for (k=0; k <=co-1;k++){
number=value[k].number;
name=value[k].name;
age=value[k].age;
sheet.getRange(k+1,1).setValue(number);
sheet.getRange(k+1,2).setValue(name);
sheet.getRange(k+1,3).setValue(age);
}
//返答
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.JSON);
output.setContent(JSON.stringify({ message: "success!" }));
return output;
##windows10でcurlコマンドでjSONファイルをpost
windows10ではcurlコマンドが利用できます。jsonファイルを用意しないとエスケープシーケンス等面倒です。
jsonファイルを用意しておくと下記で利用可能
curl -d @test.json -H "Content-Type: application/json" <デプロイしたgasのURL>
コマンドラインでも直書きできますがお勧めしないです。*イメージ図
curl -d { /"rows/": ・・・・・・ } -H "Content-Type: application/json" <デプロイしたgasのURL>
##実際に使うとき(batファイル実行の注意点)
batファイルで、json作成 とcurlコマンドを一環で実行します。
batファイルを作成するとき「"」についてエスケープしないとエラーになります。*備忘録
@echo off
☆json作る処理
curl -d @test.json -H \"Content-Type: application/json\" <デプロイしたgasのURL>