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

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

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

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドキュメント

Google ドキュメントは、Google社が提供している文書作成ツール。Googleアカウントがあれば無料で利用できます。ブラウザ上で文書作成を行い、複数人での同時編集がで可能。スマホやタブレットでも利用できる他、オフラインでの編集もできます。

Q&A

解決済

1回答

407閲覧

Googleフォームの自動返信文をGoogleドキュメントから引用して作成したいがエラーになってしまう

dshiraiwa

総合スコア9

Google スプレッドシート

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google ドキュメント

Google ドキュメントは、Google社が提供している文書作成ツール。Googleアカウントがあれば無料で利用できます。ブラウザ上で文書作成を行い、複数人での同時編集がで可能。スマホやタブレットでも利用できる他、オフラインでの編集もできます。

0グッド

0クリップ

投稿2022/11/16 14:07

エラーメッセージ「Cannot read property 'getLastRow' of null」

Googleフォームにて申込みいただいた人にGoogleドキュメントの文章内容を踏まえた自動返信ができればと以下のコードを書いたのですが、「Cannot read property 'getLastRow' of null」というエラーが出てしまいます。

こちらの質問と回答を確認しましたが、それでも解決できませんでした。

TypeError: Cannot read property 'getLastRow' of nullと出てしまいます
https://teratail.com/questions/317328

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • Googleフォームに入力した人に対して入力したメールアドレスに自動返信メールが届く
  • 自動返信の文章はGoogleドキュメントの文章から引用(名前はフォーム入力内容に差し替える形)

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

TypeError: Cannot read property 'getLastRow' of null

該当のソースコード

Googleアップスクリプト

1function myFunction() { 2//■スプレッドシートから読み込む 3 4 const sp = SpreadsheetApp.getActiveSheet(); 5 let row = sp.getLastRow(); 6 7 //お名前 8 let name = sp.getRange('b' + row).getValue(); 9 10 11//■メール送信 12 //メールアドレス 13 let mail_address = sp.getRange('d' + row).getValue(); 14 15 //メールタイトル 16 const title = 'お申し込み、ありがとうございます。'; 17 18 //メール本文 19 const doc = DocumentApp.openById('<GoogleドキュメントのID>'); 20 const body = doc.getBody().getText().replace('{お名前}',name); 21 22 //自分の情報 23 const my_name ='送信者名'; 24 const my_mail_address= 'メールアドレス'; 25 const option ={from:my_mail_address,name: my_name}; 26 27 //メール送信 28 GmailApp.sendEmail(mail_address,title,body,option); 29 30 //自分へメール送信 31 GmailApp.sendEmail(my_mail_address,title,body,option); 32 33}

試したこと

フォームへの入力→送信と送っても、先のエラーメッセージが出てしまう。

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

もともと、こちらのサイト内容からコードを引用しました。

Googleフォームに自動返信機能をつけるGAS。差出人名・メールアドレス変更。
https://www.ex-it-blog.com/autoreply-gas

ご指導のほど、お願いいたしますm(_ _)m

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

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

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

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

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

Cocode

2022/11/16 17:15

確認失礼します。 A)そのGASは、Googleスプレッドシートと紐づけたコンテナバインド型ですか? B)またはスタンドアロン型、もしくはGoogleフォームに紐づいたコンテナバイド型ですか? Bの場合、うまくいかないと思います。
dshiraiwa

2022/11/17 02:53

ご質問、ありがとうございます! > A)そのGASは、Googleスプレッドシートと紐づけたコンテナバインド型ですか? こちらです!そうですね、フォームに紐づいたものと、スプレッドシートに紐づいたものがありますね! その違いをよく理解していませんでした…💦 お教えいただきましてありがとうございますm(_ _)m
Cocode

2022/11/17 14:01 編集

ありがとうございます。Aであれば問題ないですね。 エラーの内容的に、const sp = SpreadsheetApp.getActiveSheet(); この部分ですでにうまくいってないっぽいんですよね。 この行の下に Logger.log(sp.getSheetName()); と書いて実行してみたらどうなりますか? コンソールに表示されるシート名は、目的のシート名で合っていますか?それともエラーになりますか?
dshiraiwa

2022/11/17 16:54

> エラーの内容的に、const sp = SpreadsheetApp.getActiveSheet(); この部分ですでにうまくいってないっぽいんですよね。 なるほど! > この行の下に Logger.log(sp.getSheetName()); と書いて実行してみたらどうなりますか? さっそく、やってみますっ!お待ちくださいm(_ _)m
dshiraiwa

2022/11/21 05:46

お返事が遅くなってしまってスイマセン! あれから色々とやってみたのですが… トリガーを一回削除をして、再度、作り直したところ、動くようになりました!
guest

回答1

0

自己解決

Cocodeさんのアドバイスを踏まえて試行錯誤させていただきました結果、
「トリガーを一度削除して、再度作成する」
ことで、解決することができました。

週末を挟んでしまい、Cocodeさんへのお返事が遅れてしまいましたこと、
また、結果的に自己解決になってしまったこと、お手数をおかけしたにもかかわらず、
とても申し訳なく思っております…
(とりあえず今後もお力をいただければという願いを込めまして、フォローさせていただきました)

以下が、完成コードとなります(Googleフォームの自動返信について、名前を挿入して送信する。※なお、「Googleスプレッドシートと紐づけたコンテナバインド型」にて)
こちらをご覧いただきました方にお役に立ちましたら幸いですm(_ _)m
ありがとうございました。

Googleアップスクリプト

1function myFunction() { 2//■スプレッドシートから読み込む 3 4 const sp = SpreadsheetApp.getActiveSheet(); 5 let row = sp.getLastRow(); 6 7 //お名前 8 let name = sp.getRange('b' + row).getValue(); 9 10 11//■メール送信 12 //メールアドレス 13 let mail_address = sp.getRange('d' + row).getValue(); 14 15 //メールタイトル 16 const title = 'お申し込み、ありがとうございます。'; 17 18 //メール本文 19 const doc = DocumentApp.openById('<GoogleドキュメントのID>'); 20 const body = doc.getBody().getText().replace('{お名前}',name); 21 22 //自分の情報 23 const my_name ='送信者名'; 24 const my_mail_address= 'メールアドレス'; 25 const option ={from:my_mail_address,name: my_name}; 26 27 //メール送信 28 GmailApp.sendEmail(mail_address,title,body,option); 29 30 //自分へメール送信 31 GmailApp.sendEmail(my_mail_address,title,body,option); 32 33}

投稿2022/11/21 05:52

dshiraiwa

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問