質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

4596閲覧

GASにおいてパラメータをうまく受け取ることができない

Saitoh_

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/12/22 13:48

編集2020/12/22 13:56

前提・実現したいこと

Google App Script(GAS)を用いてArduinoから送られてくるデータをGoogle Spreadsheetに格納したい。
その際、Arduino側から指定した番号によって書き込むシートを選択したい。
番号の指定はパラメータによって渡す。

発生している問題

送りたいデータ等のパラメータはきちんと渡せているが、番号指定のパラメータ(NUMBER)のみうまく渡せていない。

該当のソースコード

GAS

1 var id = 'XXXXXXXXXX'; 2 3function doGet(e) { 4 var spreadsheet=SpreadsheetApp.openById(id).getSheets(); 5 var NUMBER = e.parameter.NUMBER; 6 var sheet=spreadsheet[NUMBER-1]; 7 var newRow = sheet.getLastRow() + 1; 8 9 if (e.parameter == undefined) { 10 var result = 'Parameter undefined'; 11 } 12 else{ 13 var rowData = []; 14 var YEAR = e.parameter.YEAR; 15 var MONTH = e.parameter.MONTH; 16 var DAY = e.parameter.DATE; 17 var HOUR = e.parameter.HOUR; 18 var MIN = e.parameter.MIN; 19 var SEC = e.parameter.SEC; 20 var strDATE=String(YEAR)+'/'+String(MONTH)+'/'+String(DAY)+'_'+String(HOUR)+':'+String(MIN)+':'+String(SEC); 21 22 rowData[0] = e.parameter.Lux; //Lux 23 rowData[1] = e.parameter.Temp; //Temp 24 rowData[2] = e.parameter.RH; //RH 25 rowData[3] = e.parameter.CO2a;//CO2 26 rowData[4] = e.parameter.CO2b; 27 rowData[5] = e.parameter.CO2c; 28 rowData[6] = NUMBER; 29 30 sheet.getRange(newRow,1,1,1).setValue(strDATE); 31 var newRangeData = sheet.getRange(newRow, 2, 1, rowData.length); 32 newRangeData.setValues([rowData]); 33 var result = 'Ok'// Text des Anworts 34 } 35 36 return ContentService.createTextOutput(result); 37}

Arduino

1//該当部のみ記載 2 String URL="https://script.google.com/macros/s/"; 3 URL += key; 4 URL += "/exec?"; 5 URL += "$NUMBER="; 6 URL += Number; 7 URL += "&YEAR="; 8 URL += YEAR; 9 URL += "&MONTH="; 10 URL += MONTH; 11 URL += "&DATE="; 12 URL += DATE; 13 URL += "&HOUR="; 14 URL += HOUR; 15 URL += "&MIN="; 16 URL += MIN; 17 URL += "&SEC="; 18 URL += SEC; 19 20 21 URL += "&Lux="; 22 URL += sensor_Lux; 23 URL += "&Temp="; 24 URL += Temp ; 25 URL += "&RH="; 26 URL += RH ; 27 URL += "&CO2a="; 28 URL += CO2a; 29 URL += "&CO2b="; 30 URL += CO2b; 31 URL += "&CO2c="; 32 URL += CO2c; 33

試したこと

原因の模索→e.parameter.NUMBERが渡せていないことでは?と推定(それに至るまでの経緯を下に記します。)
GASのウェブアプリとして公開のところをやり直す(versionは毎回Newを指定)

###e.parameter.NUMBERのみが渡せていないと判断した経緯
上記のコードではまずシートへの記述が始まらなかったので、**var sheet=spreadsheet[NUMBER-1]でなく--[1]などとしてシートを開いた。
その後
if(e.parameter==undefined)**のブロックの後に
else if(e.parameter.NUMBER==undefined){新しい行の左端のセルに適当な単語を入力させる}といった処理を追加したところ、
指定した単語が延々とセルに書き込まれたため。
また、else ifとは違うアプローチとして、上記コードではDatarowの6番目として
NUMBER
(4行目でe.parameter.NUMBERを代入している)を格納して試しているが、セルには何も表示されなかったため。
それ以外の時刻や各種センサーの値はシートに正しく書き込まれていった。

補足情報

シリアルモニタで最終的なURLを確認できるようにしているのですが、シリアルモニタには&NUMBER=1&....と書かれいます。
また、通信も成功しているようなので、GAS側で拾えていないのではと思います。
初質問ですので、至らないところがありましたらご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shozi3

2020/12/22 15:16

doGet の先頭に console.log(JSON.stringify(e.parameter)); を追加して、その出力を追記してください。メニューの「実行数」でログを確認できます。
Saitoh_

2020/12/23 01:52

質問ありがとうございます。打ち間違えというお恥ずかしい間違いでしたX( 教えていただいたことは今後またうまくいかなかった時にログを確認する方法として利用させていただきます。 ありがとうございます。
guest

回答1

0

ベストアンサー

URL += "$NUMBER=";

頭に$がついているからではないですか?

シリアルモニタには&NUMBER=1&....と書かれ

Arduinoのコードが正しければ、&NUMBER=1&...とはならないと思いますが。
exec?$NUMBER=1&...では?

投稿2020/12/22 23:17

macaron_xxx

総合スコア3191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Saitoh_

2020/12/23 01:49

先入観にやられていました....。ほんとにお恥ずかしい間違いですね。 迅速な解決ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問