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

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

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

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

Gmail

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

Google Apps Script

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

JavaScript

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

Google

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

Q&A

解決済

1回答

1183閲覧

GAS メールより必要要項を取り出してスプレッドシート へ添付がしたいです

nezumimuzen

総合スコア19

Google スプレッドシート

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

Gmail

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

Google Apps Script

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

JavaScript

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

Google

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

0グッド

0クリップ

投稿2020/05/24 19:27

編集2020/05/24 19:30

前提・実現したいこと

コード Google App Script

ここに質問の内容を詳しく書いてください。
当方非プログラマーですが、GASでメールを取得後スプレッドシート へ必要要項を転記するプログラムをWeb上のサンプルやその他関連コードを参照しながら作っているのですが下記エラーが発生し解決ができず質問いたしました。

やりたいこと
Gmailにて「会員登録」とラベル振り分けした未読メールを取得

下記のようなメールの(名前、かな、性別、生年月日、郵便番号、住所、メールアドレス、電話番号)を抽出しスプレッドシート の指定の列に転記

転記後の未読メールを既読へ

元のメールデータ/例文

┏━━━━━━━━━━━━━━┓
[名前] : ああ
[かな(名前)] : ああ
[職業] : 会社員
[性別] : 女性
[生年月日] : 1900年1月1日
[郵便番号]: 2310000
[都道府県] : 東京都
[住所1] : あああ
[住所2] : あああ
[電話番号] : 09000000000
[メールアドレス] : 000000@000.com
┗━━━━━━━━━━━━━━┛

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

エラーメッセージ TypeError: Cannot read property '0' of null(行 34、ファイル「test」)

該当のソースコード

Google

1ソースコード 2var sheet = SpreadsheetApp.getActiveSheet(); 3var data = sheet.getRange(7, 21, sheet.getLastRow() + 1).getValues(); 4 5function getMail01(){ 6 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 7 8// シート名を記入。 9 var objSheet = objSpreadsheet.getSheetByName("test");  10 var sheet = SpreadsheetApp.setActiveSheet(objSheet); 11 var start = 0; 12 13 // 取得するメールの最大件数 14 var max = 100; 15 16 // Gmailのラベル名 17 var threads = GmailApp.search('label:会員登録 is:unread',start,max); 18  19 var Messages = GmailApp.getMessagesForThreads(threads); 20 var row = sheet.getLastRow() + 1; 21 22 // 見出しがあるためシートの1行目を固定 23 sheet.setFrozenRows(1); 24 25 // メールから日時、要項を取り出す// 26 for(var i = 0; i < Messages.length; i++) { 27 for(var j = 0; j < Messages[i].length; j++) { 28 29 var body = Messages[i][j].getPlainBody(); 30 var date = threads[i].getMessages()[j].getDate(); 31 32 var regName = new RegExp('[名前] : ' + '.*?' + '\r'); 33 var Name = body.match(regNumber)[0].replace('[名前] : ', '').replace('\r', ''); 34 var regKana = new RegExp('[かな(名前)] : ' + '.*?' + '\r' ); 35 var Kana = body.match(regName)[0].replace('[かな(名前)] : ', '').replace('\r', ''); 36 var regGender = new RegExp('[性別] : ' + '.*?' + '\r' ); 37 var Gender = body.match(regCategory)[0].replace('[性別] : ', '').replace('\r', ''); 38 var regTrack = new RegExp('[郵便番号]: ' + '.*?' + '\r' ); 39 var Track = body.match(regMoney)[0].replace('[郵便番号]: ', '').replace('\r', ''); 40 var regTrack2 = new RegExp('[都道府県]: ' + '.*?' + '\r' ); 41 var Track2 = body.match(regMoney)[0].replace('[都道府県]: ', '').replace('\r', ''); 42 var regTrack3 = new RegExp('[住所1]: ' + '.*?' + '\r' ); 43 var Track3 = body.match(regMoney)[0].replace('[住所1]: ', '').replace('\r', ''); 44 var regTrack4 = new RegExp('[住所2]: ' + '.*?' + '\r' ); 45 var Track4 = body.match(regMoney)[0].replace('[住所2]: ', '').replace('\r', ''); 46 var regPhone = new RegExp('[電話番号] : ' + '.*?' + '\r' ); 47 var Phone = body.match(regTantou)[0].replace('[電話番号] : ', '').replace('\r', ''); 48 var regBirth = new RegExp('[生年月日] : ' + '.*?' + '\r' ); 49 var Birth = body.match(regTantou)[0].replace('[生年月日] : ', '').replace('\r', ''); 50 var regMail = new RegExp('[メールアドレス] : ' + '.*?' + '\r' ); 51 var Mail = body.match(regBusu)[0].replace('[メールアドレス] : ', '').replace('\r', ''); 52 53 54 55 // 同じメールを読み込まないように、メッセージを既読にする 56 threads[i].markRead(); 57 58 // それぞれの項目をセルを指定してスプレッドシートへ転記 59 sheet.getRange(row,1).setValue([Name]); 60 sheet.getRange(row,2).setValue([Kana]); 61 sheet.getRange(row,3).setValue([Gender]); 62 sheet.getRange(row,4).setValue([Track]); 63 sheet.getRange(row,5).setValue([Track2]); 64 sheet.getRange(row,6).setValue([Track3]); 65 sheet.getRange(row,7).setValue([Track4]); 66 sheet.getRange(row,8).setValue([Phone]); 67 sheet.getRange(row,9).setValue([Birth]); 68 sheet.getRange(row,10).setValue([Mail]); 69 row++ 70 71 } 72} 73}

試したこと

何かの関数が返っていないものと思っていますが原因がわかりません。
また、プログラムを動かすにあたって足りない部分などありましたら可能な限りお教えいただければと思います。
回答よろしくお願いいたします。

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは、以下の場所でエラーが出ていると思われるので、

Javascript

1 var regName = new RegExp('[名前] : ' + '.*?' + '\r'); 2 var Name = body.match(regNumber)[0].replace('[名前] : ', '').replace('\r', ''); 3 var regKana = new RegExp('[かな(名前)] : ' + '.*?' + '\r' ); 4 var Kana = body.match(regName)[0].replace('[かな(名前)] : ', '').replace('\r', ''); 5 var regGender = new RegExp('[性別] : ' + '.*?' + '\r' ); 6 var Gender = body.match(regCategory)[0].replace('[性別] : ', '').replace('\r', ''); 7 var regTrack = new RegExp('[郵便番号]: ' + '.*?' + '\r' ); 8 var Track = body.match(regMoney)[0].replace('[郵便番号]: ', '').replace('\r', ''); 9 var regTrack2 = new RegExp('[都道府県]: ' + '.*?' + '\r' ); 10 var Track2 = body.match(regMoney)[0].replace('[都道府県]: ', '').replace('\r', ''); 11 var regTrack3 = new RegExp('[住所1]: ' + '.*?' + '\r' ); 12 var Track3 = body.match(regMoney)[0].replace('[住所1]: ', '').replace('\r', ''); 13 var regTrack4 = new RegExp('[住所2]: ' + '.*?' + '\r' ); 14 var Track4 = body.match(regMoney)[0].replace('[住所2]: ', '').replace('\r', ''); 15 var regPhone = new RegExp('[電話番号] : ' + '.*?' + '\r' ); 16 var Phone = body.match(regTantou)[0].replace('[電話番号] : ', '').replace('\r', ''); 17 var regBirth = new RegExp('[生年月日] : ' + '.*?' + '\r' ); 18 var Birth = body.match(regTantou)[0].replace('[生年月日] : ', '').replace('\r', ''); 19 var regMail = new RegExp('[メールアドレス] : ' + '.*?' + '\r' ); 20 var Mail = body.match(regBusu)[0].replace('[メールアドレス] : ', '').replace('\r', '');

下の様な感じで、 body.match(上で書いた変数)にしっかり変数を代入すればエラーが出ないと思います。

Javascript

1 var regName = new RegExp('[名前] : ' + '.*?' + '\r'); 2 var Name = body.match(regName)[0].replace('[名前] : ', '').replace('\r', ''); 3 var regKana = new RegExp('[かな(名前)] : ' + '.*?' + '\r' ); 4 var Kana = body.match(regKana)[0].replace('[かな(名前)] : ', '').replace('\r', ''); 5 var regGender = new RegExp('[性別] : ' + '.*?' + '\r' ); 6 var Gender = body.match(regGender)[0].replace('[性別] : ', '').replace('\r', ''); 7 var regTrack = new RegExp('[郵便番号]: ' + '.*?' + '\r' ); 8 var Track = body.match(regTrack)[0].replace('[郵便番号]: ', '').replace('\r', ''); 9 var regTrack2 = new RegExp('[都道府県]: ' + '.*?' + '\r' ); 10 var Track2 = body.match(regTrack2)[0].replace('[都道府県]: ', '').replace('\r', ''); 11 var regTrack3 = new RegExp('[住所1]: ' + '.*?' + '\r' ); 12 var Track3 = body.match(regTrack3)[0].replace('[住所1]: ', '').replace('\r', ''); 13 var regTrack4 = new RegExp('[住所2]: ' + '.*?' + '\r' ); 14 var Track4 = body.match(regTrack4)[0].replace('[住所2]: ', '').replace('\r', ''); 15 var regPhone = new RegExp('[電話番号] : ' + '.*?' + '\r' ); 16 var Phone = body.match(regPhone)[0].replace('[電話番号] : ', '').replace('\r', ''); 17 var regBirth = new RegExp('[生年月日] : ' + '.*?' + '\r' ); 18 var Birth = body.match(regBirth)[0].replace('[生年月日] : ', '').replace('\r', ''); 19 var regMail = new RegExp('[メールアドレス] : ' + '.*?' + '\r' ); 20 var Mail = body.match(regMail)[0].replace('[メールアドレス] : ', '').replace('\r', '');

投稿2020/05/24 23:25

fake_shibe

総合スコア806

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

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

nezumimuzen

2020/05/24 23:56

回答ありがとうございます。 変数の間違いに気付いておりませんでした。 解決すると思い早速変数を正しく入力し実行してみたのですが、 var Name = body.match(regName)[0].replace('[名前] : ', '').replace('\r', ''); 上記32行部分に対し「TypeError: Cannot read property '0' of null(行 32、ファイル「test」)」 とエラーが出てしまい、解決できませんでした。。
fake_shibe

2020/05/25 00:20

new RegExp("ここにかいてあるものが")の部分が一致していないので、body.match(regName)[0]でエラーが発生しているんだと思います。 下のコードにしたらどうでしょうか? var regName = new RegExp('\[名前\] : ' + '.*'); var Name = body.match(regName)[0].replace('[名前] : ', '').replace('\r', ''); var regKana = new RegExp('\[かな\(名前\)\] : ' + '.*'); var Kana = body.match(regKana)[0].replace('[かな(名前)] : ', '').replace('\r', ''); var regGender = new RegExp('\[性別\] : ' + '.*'); var Gender = body.match(regGender)[0].replace('[性別] : ', '').replace('\r', ''); var regTrack = new RegExp('\[郵便番号\]: ' + '.*'); var Track = body.match(regTrack)[0].replace('[郵便番号]: ', '').replace('\r', ''); var regTrack2 = new RegExp('\[都道府県\]: ' + '.*'); var Track2 = body.match(regTrack2)[0].replace('[都道府県]: ', '').replace('\r', ''); var regTrack3 = new RegExp('\[住所1\]: ' + '.*'); var Track3 = body.match(regTrack3)[0].replace('[住所1]: ', '').replace('\r', ''); var regTrack4 = new RegExp('\[住所2\]: ' + '.*'); var Track4 = body.match(regTrack4)[0].replace('[住所2]: ', '').replace('\r', ''); var regPhone = new RegExp('\[電話番号\] : ' + '.*'); var Phone = body.match(regPhone)[0].replace('[電話番号] : ', '').replace('\r', ''); var regBirth = new RegExp('\[生年月日\] : ' + '.*'); var Birth = body.match(regBirth)[0].replace('[生年月日] : ', '').replace('\r', ''); var regMail = new RegExp('\[メールアドレス\] : ' + '.*'); var Mail = body.match(regMail)[0].replace('[メールアドレス] : ', '').replace('\r', '');
nezumimuzen

2020/05/25 02:37

返信ありがとうございます。 返信いただいたコードで施工してもエラーが発生してしまったためエラー部分を一つずつ削除したところ下記部分を削除したら正しく動作しました。 下記コードに問題がございましたらお教え願います。   var regTrack2 = new RegExp('\[都道府県\]: ' + '.*'); var Track2 = body.match(regTrack2)[0].replace('[都道府県]: ', '').replace('\r', ''); var regTrack3 = new RegExp('\[住所1\]: ' + '.*'); var Track3 = body.match(regTrack3)[0].replace('[住所1]: ', '').replace('\r', ''); var regTrack4 = new RegExp('\[住所2\]: ' + '.*'); var Track4 = body.match(regTrack4)[0].replace('[住所2]: ', '').replace('\r', ''); sheet.getRange(row,5).setValue([Track2]); sheet.getRange(row,6).setValue([Track3]); sheet.getRange(row,7).setValue([Track4]);
nezumimuzen

2020/05/25 04:13

コードを確認したところ「:」部分のスペースが不揃いでそちらを合わせましたら正常に動作しました! 下記に書き直したコードを記入いたしました。 この度は誠にありがとうございました!! var regTrack2 = new RegExp('\[都道府県\] : ' + '.*'); var Track2 = body.match(regTrack2)[0].replace('[都道府県] : ', '').replace('\r', ''); var regTrack3 = new RegExp('\[住所1\] : ' + '.*'); var Track3 = body.match(regTrack3)[0].replace('[住所1] : ', '').replace('\r', ''); var regTrack4 = new RegExp('\[住所2\] : ' + '.*'); var Track4 = body.match(regTrack4)[0].replace('[住所2] : ', '').replace('\r', '');
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問