googleメールの中身をスプレッドシートに転記させようとしています。
一部転記できない文字があります。私の見解は改行から始まっていて正規表現が正しくない認識です。
正規表現調べましたが、うまく転記できていない状況です。
下記画像のご質問・ご確認事項:のところのテストテストテスト部分を転記させたい所存です。
非エンジニアです。ご教授お願いいたします。
var regMatters = new RegExp('ご質問・ご確認事項:' + '.*?'+ '\n' ); var Matters = body.match(regMatters)[0].replace('ご質問・ご確認事項:', '').replace('\n', '');
下記がコードになります。
ログ確認するとMattersに代入できていない状況です。
var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getRange(7, 21, sheet.getLastRow() + 1).getValues(); function getMail01(){ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var objSheet = objSpreadsheet.getSheetByName("お問い合わせ"); var sheet = SpreadsheetApp.setActiveSheet(objSheet); var start = 0; var max = 100; var threads = GmailApp.search('label:健康診断申込 is:unread',start,max); var Messages = GmailApp.getMessagesForThreads(threads); var row = sheet.getLastRow() + 1; sheet.setFrozenRows(1); for(var i = 0; i < Messages.length; i++) { for(var j = 0; j < Messages[i].length; j++) { var id = Messages[i][j].getId(); if(!hasId(id)){ var body = Messages[i][j].getPlainBody(); var date = threads[i].getMessages()[j].getDate(); console.log(`body ${body}`); var regInsurerNumber = new RegExp('保険者番号:' + '.*?' + '\n'); var InsurerNumber = body.match(regInsurerNumber)[0].replace('保険者番号:', '').replace('\n', ''); var regInsurerSymbol = new RegExp('保険証記号:' + '.*?' + '\n' ); var InsurerSymbol = body.match(regInsurerSymbol)[0].replace('保険証記号:', '').replace('\n', ''); var regHealthNumber = new RegExp('保険証番号:' + '.*?' + '\n' ); var HealthNumber = body.match(regHealthNumber)[0].replace('保険証番号:', '').replace('\n', ''); var regName = new RegExp('申込者氏名:' + '.*?' + '\n' ); var Name = body.match(regName)[0].replace('申込者氏名:', '').replace('\n', ''); var regSex = new RegExp('性別:' + '.*?' + '\n' ); var Sex = body.match(regSex)[0].replace('性別:', '').replace('\n', ''); var regBirthday = new RegExp('生年月日:' + '.*?' + '\n' ); var Birthday = body.match(regBirthday)[0].replace('生年月日:', '').replace('\n', ''); var regMailAddress = new RegExp('メールアドレス:' + '.*?' + '\n' ); var MailAddress = body.match(regMailAddress)[0].replace('メールアドレス:', '').replace('\n', ''); var regPostalCode = new RegExp('郵便番号:' + '.*?' + '\n' ); var PostalCode = body.match(regPostalCode)[0].replace('郵便番号:', '').replace('\n', ''); var regAddress = new RegExp('住所:' + '.*?' + '\n' ); var Address = body.match(regAddress)[0].replace('住所:', '').replace('\n', ''); var regTelephoneNumber = new RegExp('電話番号:' + '.*?' + '\n' ); var TelephoneNumber = body.match(regTelephoneNumber)[0].replace('電話番号:', '').replace('\n', ''); var regMedicalCode = new RegExp('医療機関コード:' + '.*?' + '\n' ); var MedicalCode = body.match(regMedicalCode)[0].replace('医療機関コード:', '').replace('\n', ''); var regMedicalName = new RegExp('医療機関名:' + '.*?' + '\n' ); var MedicalName = body.match(regMedicalName)[0].replace('医療機関名:', '').replace('\n', ''); var regFirstChoice = new RegExp('第1受診希望日:' + '.*?' + '\n' ); var FirstChoice = body.match(regFirstChoice)[0].replace('第1受診希望日:', '').replace('\n', ''); var regSecondChoice = new RegExp('第2受診希望日:' + '.*?' + '\n' ); var SecondChoice = body.match(regSecondChoice)[0].replace('第2受診希望日:', '').replace('\n', ''); var regThirdChoice = new RegExp('第3受診希望日:' + '.*?' + '\n' ); var ThirdChoice = body.match(regThirdChoice)[0].replace('第3受診希望日:', '').replace('\n', ''); var regMedicalCourse = new RegExp('受診コース:' + '.*?' + '\n' ); var MedicalCourse = body.match(regMedicalCourse)[0].replace('受診コース:', '').replace('\n', ''); var regOption = new RegExp('オプション:' + '.*?' + '\n' ); var Option = body.match(regOption)[0].replace('オプション:', '').replace('\n', ''); var regMatters = new RegExp(/ご質問・ご確認事項:.*/); var regMatters1 = new RegExp(/-.*/); let startIng = body.match(regMatters).index; let endInd = body.match(regMatters1).index; var Matters = body.slice(startIng, endInd).replace('ご質問・ご確認事項:', '').replace('\n', ''); console.log(`Matters: ${Matters}`); id // 同じメールを読み込まないように、メッセージを既読にする threads[i].markRead(); sheet.getRange(row,1).setValue(date); sheet.getRange(row,2).setValue([InsurerNumber]); sheet.getRange(row,3).setValue([InsurerSymbol]); sheet.getRange(row,4).setValue([HealthNumber]); sheet.getRange(row,5).setValue([Name]); sheet.getRange(row,6).setValue([Sex]); sheet.getRange(row,7).setValue([Birthday]); sheet.getRange(row,8).setValue([MailAddress]); sheet.getRange(row,9).setValue([PostalCode]); sheet.getRange(row,10).setValue([Address]); sheet.getRange(row,11).setValue([TelephoneNumber]); sheet.getRange(row,12).setValue([MedicalCode]); sheet.getRange(row,13).setValue([MedicalName]); sheet.getRange(row,14).setValue([FirstChoice]); sheet.getRange(row,15).setValue([SecondChoice]); sheet.getRange(row,16).setValue([ThirdChoice]); sheet.getRange(row,17).setValue([MedicalCourse]); sheet.getRange(row,18).setValue([Option]); sheet.getRange(row,19).setValue([Matters]); sheet.getRange(row,20).setValue([id]); row++
bodyの中身はどのような文字列になっているのでしょうか?
bodyの中身は下記です。
■申込み内容
第1受診希望日:2022年06月24日
第2受診希望日:2022年07月15日
第3受診希望日:2022年06月24日
受診コース:生活習慣病予防健診Bコース(バリウムを希望しない)
オプション:腹部超音波 / 乳腺エコー
ご質問・ご確認事項:
テストテストテスト
テスト
回答いただいたコードでご質問・ご確認事項のところ転記できました。
しかしながら画像に表示してあります。下記の区切りの線も転記してしまいまいまして、こちらだけ省くことは可能でしょうか?
-----------------------------------------------
おっと・・・bodyの中身はこうなっていたのですね
body =
・・・省略・・・
ご質問・ご確認事項:
-----------------------------------------------
テストテストテスト
テスト
修正しますので、少々お待ちください。
すみません。body内の説明不足でした。ありがとうございます。
body内下記です。
body =
・・・省略・・・
ご質問・ご確認事項:
テストテストテスト
テスト
-----------------------------------------------
回答修正しましたので、ご確認をお願いします。
変更いただいたコードに変更すると。
ご質問・ご確認事項:以降が転記されなくなりました。
恐れ入りますがご教授お願いいたします。
> ご質問・ご確認事項:以降が転記されなくなりました。
「-----------------------------------------------」を含まず かつ
「テストテストテストテスト」が表示されるようにですよね?
それとも、別の文字列を表示させることなのでしょうか?
回答にコード実施時の画像も追加しました。
おっしゃる通りで
「-----------------------------------------------」を含まず かつ、ご質問・ご確認事項:以降を転記させたいです。
また、ご質問・ご確認事項:以降は本文のメールによって異なります。
本質問に詳細と現在のログの状況、追記いたしました。
ご確認とご教授お願いいたします。
ご記載いただきありがとうございます。
急ぎ、修正を行います。
それと回答の内容は一時的に削除しておきます。
かしこまりました。
ありがとうございます
お手数おかけします。

回答1件
あなたの回答
tips
プレビュー