前提・実現したいこと
コード 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」)
該当のソースコード
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/24 23:56
2020/05/25 00:20
2020/05/25 02:37
2020/05/25 04:13