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

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

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

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

Google Apps Script

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

Google

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

Q&A

2回答

10929閲覧

GASで「undefined」というエラーが発生します。解決方法が知りたいです。

UR0429

総合スコア12

Google スプレッドシート

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

Google Apps Script

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

Google

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

0グッド

0クリップ

投稿2019/06/19 05:34

前提・実現したいこと

GASがお分かりの方是非ご教授ください!
とても困っています…

Gmailからスプレッドシートに内容を抽出したいのですが、
以下スクリプトにのせても、
「undefined」というエラーメッセージがでてしまいます。
(このソースコードはフリーサイトよりコピペして使用してください、とあるものを持って来ています。)

ラベルは「発送」としてすべて設定済み、タイトルにも「発送」はすべてついています。
GAS初心者のため、詳しくご説明くださると大変ありがたいです。
よろしくお願いいたします。

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

「undefined」

該当のソースコード

javascript

1function getMail01(){ 2var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3var objSheet = objSpreadsheet.getSheetByName("原稿発送");//校正原稿発送 4var sheet = SpreadsheetApp.setActiveSheet(objSheet); 5 6//GMAILから取得するものを指定 7var start = 0; 8var max = 500; 9var threads = GmailApp.search('label:原稿発送',start,max); 10var row = sheet.getLastRow() + 1;//最後の行探してそれ以降に追加 11 12for(var n in threads){ 13var thd = threads[n]; 14var msgs = thd.getMessages(); 15 16for(m in msgs){ 17var msg = msgs[m]; 18var body = msg.getBody(); 19 20var res = body.split('<br>\n<br>') 21 22// replaceで不要な文字列を削除、splitで改行ごとにuserという変数に代入 23var user = res[0].split('<br />\n'); 24//この部分はメール文面の前半部分になります。取りたり文字列を必要に応じて書き換えてください 25sheet.getRange(row, 1).setValue(String(user[1]).replace("[title] : ","")); 26row++ 27} 28thd.markRead(); 29Utilities.sleep(1000); 30} 31}

試したこと

Googleのデバックを試しましたがエラーなし。
他、組んだものではないので試す方法もわかりません。
非常に情けないのですが試してみたほうが良いこともお教えください。

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

使用しているのは
Googleのアカウントのみ。
ブラウザはchromeを使用。
使用PCのバージョンはWindows7です。

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

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

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

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

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

guest

回答2

0

// replaceで不要な文字列を削除、splitで改行ごとにuserという変数に代入
var user = res[0].split('<br />\n');
上記を

var user = res[0].split(/\r\n|\n/);

これで可能かと

投稿2020/03/16 11:16

gocci

総合スコア7

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

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

0

理由はおそらくメッセージがhtmlメールでない、タグと改行が想定通りになっていない、だと思います

解決するには、メッセージのサンプルが必要です。定型ならフォーマットをご提示ください。
定型でないなら、なにを手掛かりにどこを切りとりたいか具体化してください

・やったほうがいいこと

ソースコードはフリーサイトよりコピペして使用してください、とあるものを持って来ています

出典を書いてください。あなたが加工したことで壊れていないことを保証できますか?
もしできるというなら、「組んだものではない」というエクスキューズは通用しません。

「undefined」というエラーメッセージがでてしまいます。

もっとメッセージは多いはずです。省略せず書いてください。
それが関係ない、となぜ言えるのですか?

投稿2019/06/19 09:19

papinianus

総合スコア12705

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

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

UR0429

2019/06/20 07:21

ご回答ありがとうございます。 なんとか一晩考えてみて、エラーの理由は解りました。 引用したのはこちらのサイトよりです。 https://q-site.net/efficiency/gmail2spreadsheet/ エラーメッセージはこのままです。 こちら[titile]部分に件名のキーワードを入れるのかと勘違いしていたために結果が「undifined」になってしまっていたようです。 (本来であれば本文の取り出したい項目を入れる箇所でした) sheet.getRange(row, 1).setValue(String(user[1]).replace("[title] : ","")); ここの項目を増やしたり減らしたりなどでしたら動作上は問題がないハズです。 しかし、メール文面にてこれらの順番が必ずしも想定と同じでないとすると、取り出すのは厳しいでしょうか? 追加のご質問で大変恐縮ですが、 詳しい方とお見受け致しましたのでご教示いただけますと幸いです。 宜しくお願い致します。
papinianus

2019/06/20 11:07

エラーには行数などがでるはずです。もしかしてシートにundefinedと書かれるという意味ならコードのエラーではないです。 > メール文面にてこれらの順番が必ずしも想定と同じでないとすると、取り出すのは厳しいでしょうか 繰り返しになりますが、厳しいかどうかはメールの文面や手掛かりがあるか次第です。 たとえば参考サイトの文面はおそらく何らかの問い合わせフォームから自動生成されたものと推測します。 これが手書きだと全角半角やスペースの有無など考慮要素が多くなります。取引先に書式を依頼できないなら現実的には不可能でしょう。 順番が違う程度なら幸運といって差し支えないレベルです。 質問者様の場合、まずはHTMLメールになるかどうかから検討いただきたいです。
UR0429

2019/06/21 01:56

ありがとうございます。 シートに「undefined」のエラーが出ます。 実はまだ運用段階ではなく、試作としてこちらのコードを1通に対して使用しております。 読み取りたい情報は【タイトル(商品名)】【納期】【作業日】などを想定しており、自動生成ではなくこちらのテンプレートを各個人に埋めてもらうように想定しています。 メールはHTMLであることを確認いたしました。 そのため、こちらのコード自体は使える様です。
papinianus

2019/06/21 04:38

【】がメールに書いてあるんですね? カッコから行の終わりまでが、内容ですか? それとも一文に複数の内容が盛り込まれるのですか?
UR0429

2019/06/21 07:18

【タイトル(商品名)】〇〇 【納期】xx/xx/xx のように、それぞれ項目名の後に入れてもらうつもりです。 項目ごとに行をかえてもらい、一文につきひとつの情報にしたいと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問