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

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

ただいまの
回答率

88.92%

HTMLのフォーム送信データをGASでスプレッドシートに取り込みたい!

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 211

TomoG3

score 1

前提・実現したいこと

HTMLのメールフォームから送信されたデータを、GASで受け取り、Googleスプレッドシートに書き込んでいきたいのです。

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

いろいろググったところ、こちら↓が一番シンプルだったので、GoogleDriveで新しいスプレッドシートを作り、そこからスクリプト エディタを立ち上げ、全部コピーしてやってみたのですがうまくいきません。
https://productivityresearch.net/programing/116/ 

<以下、やったことの追記です>

1.GoogleDriveを立ち上げる
2.マイドライブから「Googleスプレッドシート」を選択
3.表示されたスプレッドシートの「ツール」の「スクリプト エディタ」を選択
4.コード.gsの画面で、表示文をすべて削除して上のコード.gsのソースコードをコピペ
5.スクリプト エディタの画面で、「ファイル」「New」「HTMLファイル」を選択
6.名前を「index」として、表示文をすべて削除して上のindex.htmlのソースコードをコピペ
7.再度 5.
8.名前を「result」として、表示文をすべて削除して上のresult.htmlのソースコードをコピペ
9.できた3つのページを保存
10.スクリプト エディタの画面で、「公開」「ウェブ アプリケーションとして導入」を選択
11.更新を選択するとアクセス許可を求めてくるので許可の処置を実行
12.latest codeをクリックして送信フォーム画面を表示
13.入力し送信ボタンをクリック
14. 3.のスプレッドシートを確認。(何も表示されない)
15.スクリプト エディタの画面で、「実行」「関数を実行」「doGet」を選択(無事終了)
16.スクリプト エディタの画面で、「実行」「関数を実行」「doPost」を選択

その結果、(赤いポップアップの中に)
TypeError: Cannot read property 'parameters' of undefined(行 14、ファイル「コード」)
と表示される。

エラーメッセージ
TypeError: Cannot read property 'parameters' of undefined(行 14、ファイル「コード」)

というエラーがでます。

### 該当のソースコード

以下すべてGAS内で記述しています。(上記サイトから丸々コピペです。)


コード.gs

function doGet() {

var toppage=HtmlService.createTemplateFromFile("index");

return toppage.evaluate();

}

function doPost(postdata){

var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var time=new Date();

var name=postdata.parameters.name.toString();   // ← ここでエラー! (行 14、ファイル「コード」)
var gender=postdata.parameters.gender.toString();
var animal=postdata.parameters.animal.toString();

sh.appendRow([time,name,gender,animal]);

var resultpage=HtmlService.createTemplateFromFile("result");
return resultpage.evaluate();
}


index.html

<!DOCTYPE html>
<html>

<head>
<base target="_top">
</head>

<body>
<h1>doPostによる方法</h1>
<form method="post" action="https://script.google.com/macros/s/AKfycbwvNsTpF5-yq9IH6_kFutV_JjUAU1-uojNZghC-CfW4x9lov389/exec">
氏名:<input type="text" name="name"><br>
性別:
<input type="radio" name="gender" value="男性">男性
<input type="radio" name="gender" value="女性">女性<br>
好きな動物:
<input type="checkbox" name="animal" value="犬">いぬ
<input type="checkbox" name="animal" value="猫">ねこ
<input type="checkbox" name="animal" value="うさぎ">うさぎ<br>
<input type="submit" value="送信する">
</form>
</body>
</html>


result.html

<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
送信が完了しました。<br><br>
<a href="https://script.google.com/macros/s/AKfycbwvNsTpF5-yq9IH6_kFutV_JjUAU1-uojNZghC-CfW4x9lov389/exec">もう一度回答する</a>
</body>
</html>

ここに言語名を入力
ソースコード
```

試したこと

このエラーメッセージは見に行っている先のファイルに問題がある(parameter を認識できない)というようなことを書かれているサイトがあったのですが、
index.htmlのどこをいじっても解決できません。

メールフォーム自体は生成されるのでテスト送信してみたのですが、当然スプレッドシートには何も表示されません。

本来なら上述のサイトで質問すべきですがどうも質問できないようなのでこちらでお尋ねします。

当方素人なのでお手上げです。、
どなたか解決策をご教示願います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

https://script.google.com/home
ここからスクリプト作ってやれば動きますよ。

以下の意味を知りたいんですか?

var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();


https://docs.google.com/spreadsheets/d/10iP5jXSHMMU3RBv-Snl8whxksgaRx4zP1SC2oXD6GtU/edit#gid=0
回答は上記のスプレッドシートの最下行に保存されますよ。

自分のスプレッドシートを指定する場合は

var sh = SpreadsheetApp.openById("スプレッドシートのID").getSheetByName("スプレッドシートのシート名");


完全自分のスクリプトにする場合は上記スプレッド指定とあわせて
index.html内の

https://script.google.com/macros/s/AKfycbwvNsTpF5-yq9IH6_kFutV_JjUAU1-uojNZghC-CfW4x9lov389/exec


の部分を自分のスクリプトに編集すれば動くんじゃないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/13 07:10

    できました!

    コード.gsで
    >自分のスプレッドシートを指定
    と、
    index.htmlの <form method="post" action= で
    >自分のスクリプトに編集

    で、できました。
    ちなみに、
    >自分のスプレッドシートを指定
    をサンプル通りに戻してやってみてもできました。

    すっきりしました。どうもありがとうございました。

    キャンセル

0

上記ソースコードコピーしてテストしましたが
エラーはなく
提示されているURLのスプレッドシートに保存されました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/12 10:32

    ご回答ありがとうございます。

    そうなんですか・・・

    今、ワタシも上のソースコードをコピーしてやってみましたがやはりスプレッドシートには何も表示されません。

    関数を実行してみるとはやり同じエラーが表示されます。

    ひとつ質問ですが、

    >提示されているURL
    というのは、
    https://script.google.com/macros/s/AKfycbwvNsTpF5-yq9IH6_kFutV_JjUAU1-uojNZghC-CfW4x9lov389/exec
    のことですよね。

    ここのスプレッドシートとはどういうことなのでしょうか。

    最初にGoogleDriveで作成したスプレッドシートのことでしょうか。
    だとすると何も表示されないのですが・・・

    素人なので基本的なことがわかってないのかも知れずトンチンカンな質問かも知れませんが、
    ご教示いただければありがたいです。
    (ちなみに、ワタシがやった手順を詳しく上記に追記しておきます。)

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る