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

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

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

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2542閲覧

【GAS】TypeError: Cannot read property 'getLastRow' of null

narururu

総合スコア172

JavaScript

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/06/21 13:08

編集2021/06/22 00:17

解決したい課題

送付先ごとに別ファイルを添付して一斉メール送信したいです。

現状

下記サイトを参考に、コードをそのまま記述しているのですが、エラーとなります。
https://dev.classmethod.jp/articles/gas-email-with-files/
※スプレッドシートIDとメールアドレスの箇所は環境に合わせて変更しています。

エラー

~~Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.~~

上記エラーは解決しました。
現在は下記エラーで困っています。

TypeError: Cannot read property 'getLastRow' of null

コード

function send_invoice() { var spreadsheet = SpreadsheetApp.openById('{speadsheet_id_here}'); //SpreadsheetのID var sheet = spreadsheet.getSheetByName('send'); //シート名 var lastRow = sheet.getLastRow(); for(var i = 2; i <= lastRow; i ) { //getRangeの第1引数は行(1,2,3..)、第2引数はカラム(A,B,C...の順番を数値にしたもの) var filename = sheet.getRange(i,1).getValue() var report = DriveApp.getFilesByName(filename).next(); var to = sheet.getRange(i,2).getValue(); var name = sheet.getRange(i,3).getValue(); var flag = sheet.getRange(i,4).getValue(); if (flag != "NO"){ var title = "メール件名"; var content = name "様\n" "いつも大変お世話になっております。\n" "添付にて今月のインボイスをお送りいたします。\n\n" "どうぞよろしくお願いいたします。" ; GmailApp.sendEmail( to, title, content, {attachments: [report], //fromをGmail以外にする際は紐付けが必要。下記で説明。 from: 'email@example.com', cc: 'email@example.com', replyTo: 'email@example.com', name: 'My name here' } ); if (to == "") { break; } } } }

どなたか教えていただけませんでしょうか。
なぜ、エラーになるのか、どうすればエラー解決できるのか分からず、苦戦してます。

アドバイスいただけますと助かります。よろしくお願いいたします。

追記

タイトルに記載したエラーは、スプレッドシートIDの記述に間違いがあったことが原因でした。
正しい記述に修正したら、別のエラーになり前に進むことができました。
良かったです。

現在は下記のエラーが表示されている状況です。

Exception: Service invoked too many times for one day: email.

助けてくださる方いらっしゃいましたら、お願いいたします。

追記2

追記で記載したエラーを調べてみたら、1日に何度も実行すると制限されるとのことでしたので、
別のアカウントで試したところ、下記のエラーが表示されました。

TypeError: Cannot read property 'getLastRow' of null

ほげー、何が間違っているのやら。
var lastRow = sheet.getLastRow();のlastRowがグレーになってます(´・_・`)
どなたか引き続き、助けてください。

追記3

シート名が間違っていたことが原因でした。。
無事送信されるようになったのですが、メール本文が表示されない問題があり、現在も格闘中。。。
また、変数のnameが正しく機能しないです。。

グエー、なぜなのだ。

追記4

本文のコードは改行せずに、\nを使用して1つの''の中に記述したら正常に表示されるようになりました。
しかし、名前は${name}様と表示されてしまい、変数がそのまま表示されてしまいます。

ふんぐー、つらたん。

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

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

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

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

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

gas.engine

2021/06/21 19:40

idとsheet名はあっていますか? また、for文の i++のプラスが抜けています。
narururu

2021/06/21 22:00

ご回答ありがとうございます!gas.engineさん☺ sheet名を間違っていました。。 大変失礼いたしました。 しかし、別の問題が。 無事送信されるようになったのですが、本文が表示されていないのです。 また、タイトルには宛先ごとに名前を表示させるよう"name様_test"に記述したのですが、名前に変換されずname様で送信されてしまいます。 差し支えなければ、アドバイスいただけないでしょうか。
guest

回答1

0

ベストアンサー

変数を埋め込む場合にはバッククォーテーション「`」で囲む必要があります。
この場合、改行で\nは不要で自然に改行します。

JavaScript

1var content = 2`${name}3いつも大変お世話になっております。 4添付にて今月のインボイスをお送りいたします。 5 6どうぞよろしくお願いいたします。`;

投稿2021/06/22 02:06

gas.engine

総合スコア608

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

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

narururu

2021/06/22 03:05

ご回答ありがとうございます。 こちらのアドバイスを見る前にname + '~'で記述したところ、想定通りの表示が確認できました。 アドバイスありがとうございます。 しかし、また別件で問題発生です。。。 それは、別で質問を作成しようかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問