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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1518閲覧

フォームのデータを取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/03/03 09:41

#実現したいこと
forEachを使って配列に格納されているデータを取り出したい

javaScript

1getAnswer: function (e) { 2 for (var i = 1; i < lastColumn-1; i++) { 3 var questions = SPREADSHEET_ANSWERS_SHEET.getRange(1, 2, 1, i).getValues(); 4 } 5 questions.forEach(function(value) { 6//questionsに格納されているデータ[名前、日付、食べたいもの] 7 var answers = e.namedValues["value"]; 8 Logger.log(answers) 9 var result = ""; 10 result += answers; 11 return result

gasでformに入力した回答をe.namedValue["value"]でループさせて、取得したいです。。

Logger.logでanswersの中を見ると、undifiendになっています、、

なぜでしょうか。。

ご教示お願いします!

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

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

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

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

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

guest

回答1

0

ベストアンサー

formに入力した回答はe.namedValue["食べたいもの"]などに入っていますので、valueという回答項目がなければundefinedになります。

また、forEachの中でvar resultしていますし、forEachでリターンしても無意味なので、全面的に書き換えないと動作しません


なにがやりたいがあまり具体的にピンとこないのですが、↓こうでは?

javascript

1getAnswer: function (e) { 2 return [e.namedValues["名前"], e.namedValues["日付"], e.namedValues["日付"]]; 3}

キーを任意にしたいならこう。だけどどれが何の値か分からなくなるので非推奨

javascript

1getAnswer: function (e) { 2 return Object.Keys(e.namedValues].map(function(elm){return e.namedValues[elm];}); 3}

解決したとおもわれるコード

javascript

1getAnswer: function (e) { 2 // for無意味 for (var i = 1; i < lastColumn-1; i++) { 3 var questions = SPREADSHEET_ANSWERS_SHEET.getRange(1, 2, 1, lastColumn).getValues(); 4 // for無意味 } 5 var result = ""; 6 questions.forEach(function(value) { 7 value.forEach(function(val) { 8 var answers = e.namedValues[val]; 9// var result = ""; 10 this.result += answers; 11// return result; 12 }) 13 }) 14 return result; 15},

こうしたほうがいいと思う案

javascript

1getAnswer: function (e) { 2 var questions = SPREADSHEET_ANSWERS_SHEET.getRange(1, 2, 1, lastColumn).getValues(); 3 return questions.reduce(function(prev, cur) { return prev + e.namedValues[cur]}, ""); 4 //return quetions.map(function(key) { return e.namedValues[key];}).join(""); 5},

投稿2019/03/04 01:12

編集2019/03/04 03:07
papinianus

総合スコア12705

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

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

退会済みユーザー

退会済みユーザー

2019/03/04 02:37 編集

```javascript getAnswer: function (e) { for (var i = 1; i < lastColumn-1; i++) { var questions = SPREADSHEET_ANSWERS_SHEET.getRange(1, 2, 1, i).getValues(); } questions.forEach(function(value) { value.forEach(function(val) { var answers = e.namedValues[val]; var result = ""; result += answers; return result; }) }) }, createResult: function (e) { var result = ""; var answer = this.getAnswer(e); Logger.log(answer); for (var i = 1; i < lastColumn-1; i++) { var questions = SPREADSHEET_ANSWERS_SHEET.getRange(1, 2, 1, i).getValues(); } for (var n = 0; n < questions.length; n++) { result += questions[n]; result += "\n" + answer + "\n"; } return result; } ``` 現在このような、状態で、無事にフォームに入力された値が取得できました! (e.namedValuesは汎用的に作りたいので、[]内の値だけループで変更して、取得したかったです!) しかし、getAnswerメソッド内で値が取得できたのに、createResult内で、これらの値をanswerに代入することができません、、undifiniedになってしまいます。。 なぜかわかりますか?
退会済みユーザー

退会済みユーザー

2019/03/04 02:56

解決できました!
退会済みユーザー

退会済みユーザー

2019/03/04 02:57

resultを外で定義したら、できました! 原因はresultがループされてたからですね。。
papinianus

2019/03/04 03:11

> 原因はresultがループされてたからですね。。 何の原因か分かりませんが、createResultでundefinedになった原因でよいでしょうか? 「resultがループしていて、その中で毎回""に初期化していること」が原因だと「createResultでは、最後の(もっとも右端の)列のanswerしか取れない」が期待される動きです。 undefinedになる原因は、foreachを使っていることです。forEachは値をリターンしませんので、forEach内でreturnしても、他の関数から結果を得ることはできません。
退会済みユーザー

退会済みユーザー

2019/03/04 06:08

>何の原因か分かりませんが、createResultでundefinedになった原因でよいでしょうか? その通りです、、undefinedになっていました、、 >foreachを使っていることです。forEachは値をリターンしませんので これまったく知りませんでした。。勉強不足ですね、、
退会済みユーザー

退会済みユーザー

2019/03/04 06:08

こうしたほうがいいと思う案 これ参考にさせてもらうと、object,objectになってしまいます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問