問い合わせフォームからくる資料請求や打合せ希望のメールをスプレッドシートに転載し、営業メンバの方が共有できるようにリスト化するという作業が毎日発生しています。
Gmailに送られてくるこれらのお問合せのメールを、GASを用い、スプレッドシートに自動で転載できるようにできれば少しでも後輩の仕事が減ると思い、GASの勉強をし始めました。
以前こちらで質問をさせていただき教えていただいた内容等をもとに、無事ほぼ完成したのですが、一点だけうまくいかず。。。再度質問させていただきます。
反映したい問合せメールはパターンが複数ありますが、おおむね以下の通りです。
ーーーーーーーーーーーーーーーーーーーーーーー
件名:【資料請求申し込み】
本文:
下記のお問い合わせがありました。
【会社名】
XXXXXXX株式会社
【部署名】
XXX部
【氏名】
XXX XXX
【メールアドレス】
XXXXXXXXXXXX@XXXXXXXXX
【電話番号】
XXXXXXXXXXXX
【お問合せ内容】
XXXXXXXXX
yyyyyyyyy
~
【デモンストレーション希望】
XXX
【知ったきっかけ】
XXX
【関心のあるテーマ】
XXX,yyy,ccc
【社員数】
1000名以上~
【検討状況】
直近で導入を検討している←今回ここが反映されません。空欄または"直近で導入を検討している"の2パターンです。
ーーーーーーーーーーーーーーーーーーーーーーー
上記のメールをA~M列に以下のようにデータを反映したいです。
日付 件名 会社名 部署 。。。。。検討状況
最後の【検討状況】のみエラーがでてしまいます。
エラー内容としては以下の文言がでます。
●エラーパターン1:
var regBackground = new RegExp('【検討状況】' + '[\s\S]*?');
上記において
TypeError: Cannot read property '0' of null(行 104、ファイル「コード」)
がでます。※if文を除いた場合。問合せフォームよとっては実際に【検討状況】の項目がないフォームもあります。
●エラーパターン2:
上記のregBackgroundの対象を以下に変えた場合、スプレッドシートにはすべての行に
"直近で導入を検討している"が表示されてしまいます。
var regBackground = new RegExp('直近で導入を検討している');
おそらくスレッド内でどれかのメールに"直近で導入を検討している"という文言があればそれを拾ってしまっています。
●改善したいこと
【検討状況】
直近で導入を検討している←これをうまく反映させたいです。
直近で導入を検討していると答えている内容のメールは確かに存在しているので、エラーパターン1のようにnullになることはあり得ません。
該当のソースコード
GAS
1function RegExpForm() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName('問合せ転記'); 4 var thds = GmailApp.search('from:"xxxx@gmail.com" newer_than:1d'); 5 var messe = GmailApp.getMessagesForThreads(thds); 6 const lastRow = sheet.getLastRow(); 7 const ids = sheet.getRange(2, 21, lastRow).getValues().flat(); 8 9 for(var i = 0; i < messe.length; i++) { 10 for(var j = 0; j < messe[i].length; j++) { 11 var subject = thds[i].getMessages()[j].getSubject().replace('Fw: 【', '').replace('】', ''); 12 var body = messe[i][j].getPlainBody(); 13 var id = messe[i][j].getId() 14 15 if(!ids.includes(id)){ 16 if(body.match('Date:')){ 17 var regDate = new RegExp('Date:' + '.*?' + '\r' ); 18 var Date = body.match(regDate)[0].replace('Date: ', ''); 19 } 20 21 if(body.match('【会社名】')){ 22 var regCompany = new RegExp('【会社名】' + '[\s\S]*?' + '【部署名】'); 23 var Company = body.match(regCompany)[0].replace('【会社名】', '').replace('【部署名】', '').replace('\n', '').replace('\r', ''); 24 } 25 26 if(body.match('【部署名】')){ 27 var regDepartment = new RegExp('【部署名】' + '[\s\S]*?' + '【氏名】'); 28 var Department = body.match(regDepartment)[0].replace('【部署名】', '').replace('【氏名】', '').replace('\n', '').replace('\r', ''); 29 } 30 31 if(body.match('【氏名】')){ 32 var regName = new RegExp('【氏名】' + '[\s\S]*?' + '【メールアドレス】'); 33 var Name = body.match(regName)[0].replace('【氏名】', '').replace('【メールアドレス】', '').replace('\n', '').replace('\r', ''); 34 } 35 36 if(body.match('【メールアドレス】')){ 37 var regEmail = new RegExp('【メールアドレス】' + '[\s\S]*?' + '【電話番号】'); 38 var Email = body.match(regEmail)[0].replace('【メールアドレス】', '').replace('【電話番号】', '').replace('\n', '').replace('\r', ''); 39 } 40 41 if(body.match('【電話番号】' + '[\s\S]*?' + '【お問合せ内容】')){ 42 var regTel = new RegExp('【電話番号】' + '[\s\S]*?' + '【お問合せ内容】'); 43 var Tel = body.match(regTel)[0].replace('【電話番号】', '').replace('【お問合せ内容】', '').replace('\n', '').replace('\r', ''); 44 } 45 else if(body.match('【電話番号】' + '[\s\S]*?' + '【お問い合せ内容】')){ 46 var regTel = new RegExp('【電話番号】' + '[\s\S]*?' + '【お問い合せ内容】'); 47 var Tel = body.match(regTel)[0].replace('【電話番号】', '').replace('【お問い合せ内容】', '').replace('\n', '').replace('\r', ''); 48 } 49 50 if(body.match('【お問合せ内容】' + '[\s\S]*?' + '【デモンストレーション希望】')){ 51 var regContents = new RegExp('【お問合せ内容】' + '[\s\S]*?' + '【デモンストレーション希望】'); 52 var Contents = body.match(regContents)[0].replace('【お問合せ内容】', '').replace('【デモンストレーション希望】', '').replace('\n', '').replace('\r', ''); 53 } 54 else if(body.match('【お問合せ内容】' + '[\s\S]*?' + '【知ったきっかけ】')){ 55 var regContents = new RegExp('【お問合せ内容】' + '[\s\S]*?' + '【知ったきっかけ】'); 56 var Contents = body.match(regContents)[0].replace('【お問合せ内容】', '').replace('【知ったきっかけ】', '').replace('\n', '').replace('\r', ''); 57 } 58 59 if(body.match('【ご紹介方法】')){ 60 var regDemo = new RegExp('【ご紹介方法】' + '[\s\S]*?'); 61 var Demo = body.match(regDemo)[0].replace('【ご紹介方法】', '').replace('\n', '').replace('\r', ''); 62 } 63 else if(body.match('【デモンストレーション希望】')){ 64 var regDemo = new RegExp('【デモンストレーション希望】' + '[\s\S]*?' + '【知ったきっかけ】'); 65 var Demo = body.match(regDemo)[0].replace('【デモンストレーション希望】', '').replace('【知ったきっかけ】', '').replace('\n', '').replace('\r', ''); 66 } 67 68 if(body.match('【知ったきっかけ】')){ 69 var regChannel = new RegExp('【知ったきっかけ】' + '[\s\S]*?' + '【関心のあるテーマ】'); 70 var Channel = body.match(regChannel)[0].replace('【知ったきっかけ】', '').replace('【関心のあるテーマ】', '').replace('\n', '').replace('\r', ''); 71 } 72 73 if(body.match('【関心のあるテーマ】')){ 74 var regNeeds = new RegExp('【関心のあるテーマ】' + '[\s\S]*?' + '【社員数】'); 75 var Needs = body.match(regNeeds)[0].replace('【関心のあるテーマ】', '').replace('【社員数】', '').replace('\n', '').replace('\r', ''); 76 } 77 78 if(body.match('【社員数】' + '[\s\S]*?' + '【お問い合わせ内容について】')){ 79 var regEmployees = new RegExp('【社員数】' + '[\s\S]*?' + '【お問い合わせ内容について】'); 80 var Employees = body.match(regEmployees)[0].replace('【社員数】', '').replace('【お問い合わせ内容について】', '').replace('\n', '').replace('\r', ''); 81 } 82 else if(body.match('【社員数】' + '[\s\S]*?' + '【検討状況】')){ 83 var regEmployees = new RegExp('【社員数】' + '[\s\S]*?' + '【検討状況】'); 84 var Employees = body.match(regEmployees)[0].replace('【社員数】', '').replace('【検討状況】', '').replace('\n', ''); 85 } 86 else if(body.match('【社員数】' + '[\s\S]*?')){ 87 var regEmployees = new RegExp('【社員数】' + '[\s\S]*?'); 88 var Employees = body.match(regEmployees)[0].replace('【社員数】', '').replace('\n', '').replace('\r', ''); 89 } 90 91 if(body.match('【検討状況】')){ 92 var regBackground = new RegExp('【検討状況】' + '[\s\S]*?'); 93 var Background = body.match(regBackground)[0].replace('【検討状況】', '').replace('\n', ''); 94 } 95 96 sheet.appendRow([, , , , , , , Date, Company, Department, Name, Email, Tel, Demo, Contents, Channel, Needs, Background, subject, Employees, id 97]); 98 //Logger.log([date, subject, Company, Department]); 99 } 100 var lastCol = sheet.getLastColumn(); 101 sheet.getRange(2, 1, lastRow, lastCol).sort({column: 8, ascending: false}); 102 } 103 } 104}
補足情報(FW/ツールのバージョンなど)
HTML、CSS、簡単なマクロの知識程度しかないです。HTMLを見てfomrをいじったりができる程度で、jsやGASはこれから自分のスキルアップのために学ぼうとしているところです。
初歩的なところがわからず大変お手数をおかけしますが、ご指導いただけると嬉しいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。