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

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

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

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

Q&A

解決済

1回答

1196閲覧

GASのフォームのスクリプトでdoGetを使い、情報収集したい

kazus

総合スコア11

JavaScript

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

0グッド

0クリップ

投稿2018/03/28 01:33

前提・実現したいこと

Google Apps Script(GAS)をやり始めて3か月の初心者です。
GASでアンケート登録システムを作成しようとしています。
下記のようにすすめようと考えました。

1.GASのフォームを使って対象者に名前やメールアドレスを登録してもらう。
2.フォームからのスプレッドシートには対象者の情報が記録されるので、対象者ごとにidをつける。
id 名前  mail
01 中村 nakamura@xx.com
02 佐藤 satoh@yy.jp
3.対象者にメールを送り、メール中に下記のようにid情報を付加したリンクを記載して、リンクからアンケートに答えてもらう。リンクをクリックするとGASで作成したアンケートのフォームが開く。
リンク:https://・・・・・・・?id=01 

発生している問題・エラーメッセージ

アンケートに答えていただいた方を特定するために、GASのフォームのスクリプトを使ってリンクに付加したid番号を読み取るコードを該当のソースコードのように作成しました。

アンケートフォームのurlとして、https://・・・・・/viewform?id=01 を打ち込んでみましたが、残念ながらスプレッドシートにidを記録することができませんでした。
これは、どこが悪いのでしょうか?

該当のソースコード

GAS

1function doGet(e) { 2 var id=e.parameter.id; 3 var sheet = SpreadsheetApp.openByUrl("https:・・・・・・"); 4 var array = [id]; 5 sheet.appendRow(array); 6}

試したこと

もしかしてGoogleフォームでは、このようなことはできなくて、htmlでやらないといけないのかと思い、別途、htmlファイルを作って、doGetで読み取れるかどうか試しています。
doGetでIDは読み取れるのですが、同時にdoPostで回答内容を読み取れない(あるいはその逆)という問題が起きており、これについても問題が整理されたら、質問したいと思います。

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

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

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

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

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

unz.hori

2018/03/28 02:47

"GAS doGet"でググればサンプルというか参考になる記事が見つかると思うんですが...
guest

回答1

0

ベストアンサー

スプレッドシートの中のどのシートのことなのかを指定する必要があります。

var sheet = SpreadsheetApp.openByUrl("https:・・・・・・").getSheetByName("sheet_name");

公式のリファレンスがわかりやすくまとまっているので、熟読をお勧めします。
Class SpreadsheetApp | Apps Script
| Google Developers

投稿2018/03/28 06:11

編集2018/03/28 06:20
KaiShoya

総合スコア551

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

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

kazus

2018/03/28 06:26

ご提案のようにシートのnameも指定してみましたが、変わりませんでした。
KaiShoya

2018/03/28 06:28

変わらなかったとはエラー内容が変わらなかったということでしょうか? sheetの中身とエラー内容を追記していただけますか?
kazus

2018/03/29 01:01

まず、当初のsheetのままの設定(下記)でどうなるか確認しました。 var sheet = SpreadsheetApp.openByUrl("https:・・・・・・"); それでフォームにアクセスします。urlは下記のとおり。 https://docs.google.com/forms/・・・・/formResponse?id=1000 フォームにアクセスした時点ではスプレッドシートは空白です(この時点でid=1000が記入されることを期待しています)。フォームの送信ボタンを押すと、スプレッドシートにタイムスタンプの日時が記載されます。 次にご教示のようにsheetを下記のように設定しました。 var sheet = SpreadsheetApp.openByUrl("https:・・・・・・").getSheetByName("フォームの回答1"); 次にフォームにアクセスしました。urlは先ほどと同じです。 https://docs.google.com/forms/・・・・/formResponse?id=1000 フォームにアクセスした時点では、やはりスプレッドシートは空白です。 フォームの送信ボタンを押すと、スプレッドシートにタイムスタンプの日時が記載されます。 *もしやと思い、doGetのスクリプトを公開し、そのurlの末尾に?id=1000を付加して、アクセスしたところ、スプレッドシートに1000と記入されました。手がかりではあるのですが、フォームのurlに?id=1000を付加して、スプレッドシートに1000と記入されるようにしたいのです。 doGetの公開urlにアクセスすると、自動的にフォームのurlに転送されるようになれば良いのかもしれません。 どなたかご教示いただけると、ありがたいです。
KaiShoya

2018/03/29 01:30

質問内容を「gasからスプレッドシートに書き込めない」と解釈していたんですが、正しくは「フォームからスプレッドシートにidを書き込めない」ということでいいでしょうか?
kazus

2018/03/30 02:45

フォームのurlに?id=1000を付加して、doGetを使って、スプレッドシートにid=1000を記入できないかということです。フォームにはアンケートの質問があり、その回答は別途、スプレッドシートに記入されます。 目指しているのは、スプレッドシートにidおよびアンケートの回答一覧が記入されることです。 先に書いたようにdoGetのスクリプト公開により、スプレッドシートにはid=1000を記入することができました。 やりたいのは、対象者にリンクurl=https://・・・・・/?id=1000を送り、そのリンクをクリックすることによって、スプレッドシートにid=1000と記入され、さらにフォームに回答してもらうと、その回答がスプレッドシートに記入されることです。 どちらか片方だけはできるようになりましたが、ご教示いただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問