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

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

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

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Q&A

解決済

1回答

690閲覧

GASメール添付(名前で指定)

0038

総合スコア2

Google スプレッドシート

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

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

0グッド

1クリップ

投稿2021/08/09 10:46

前提・実現したいこと

GAS
スプレッドシートで、メールアドレス・添付書類名(2種類)の一覧表を作成し
その一覧表にあるアドレス宛に添付書類(2種類)を添付して自動でメールを送りたい。

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

Exception: Cannot retrieve the next object: iterator has reached the end.

function EmailTest(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
for (var i =1; i <3; i++){
var to = sh.getRange(i,1).getValue();
var attach1 = sh.getRange(i,2).getValue();
var attach2 = sh.getRange(i,3).getValue();

var files = DriveApp.getFilesByName(attach1).next() var files2 = DriveApp.getFilesByName(attach2).next() var options = {attachments:[files,files2]} GmailApp.createDraft(to,'Attachment example','Please see attached file.',options);

}

}

### 試したこと データ型の問題かと私なりにコードを色々書き直しましたが、 上記のコードで添付が一つの場合、実行出来るのに添付が二つになると上記エラーになる 理由が分からず頓挫してしまいました。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/09 11:08 編集

・すべての行で、B列とC列の2列ともに、Googleドライブ上に存在するファイルを記載しているでしょうか? ・そのスプレッドシートに記載のファイルは、本当に正しくGoogleドライブ上に存在するファイルでしょうか? B列またはC列のいずれか(又は両方が)空欄、ないし 存在しないファイルが指定されている場合、上記のエラーが発生します。
0038

2021/08/10 14:04

qnoir様 出来ましたーーーー。 GASが初心者過ぎてデータ型の問題かと思い、色々3日間試してみて堂々巡りで頓挫しておりました。 単純なファイル名の問題だったんですね。 teratail自体の使用方法もまだ完全に分かっておらず、お礼がうまくできず申し訳ありません。 ご丁寧なご回答、ありがとうございました。
guest

回答1

0

ベストアンサー

var files = DriveApp.getFilesByName(attach1).next()
var files2 = DriveApp.getFilesByName(attach2).next()

Exception: Cannot retrieve the next object: iterator has reached the end.

filesのほうかfiles2のほうかわかりませんが、DriveApp.getFilesByNameの結果がひとつもない(つまり指定した名前のファイルが存在していない)ためnext()が失敗しているのだと思います。

まずはファイルがあるかどうか、その名前をちゃんと指定しているかどうかを確認すると良いです。

そして、必ずnext()が成功することが明らかな場合を除き、ファイルがあるかどうかをチェックするために

GAS

1var files = DriveApp.getFilesByName(attach1); 2var attach = []; 3while (files.hasNext()) { 4 attach.push(files.next()); 5}

といったような処理をするのが正しいコードです。

投稿2021/08/09 10:58

編集2021/08/09 11:13
itagagaki

総合スコア8402

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

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

退会済みユーザー

退会済みユーザー

2021/08/09 11:11

横からすみません。 attach.push(files.Next()); ↓ attach.push(files.next()); ではないでしょうか?
itagagaki

2021/08/09 11:13

qnoirさん、ありがとうございます。修正しました。
0038

2021/08/10 14:08

itagagaki様 ありがとうございます。 ファイルがあるかどうかの確認のコードはそのように記入するのですね。 勉強になりました。 一つ一つ身に着けていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問