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

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

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

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

Gmail

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

Google Apps Script

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

Q&A

解決済

1回答

1945閲覧

GASでgmail内の重複する複数項目の内容を抽出してスプレッドシートに一列で転記したい

syosinsya7777

総合スコア2

Google スプレッドシート

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

Gmail

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/09/23 02:56

前提・実現したいこと

GASでGmailからスプレッドシートに転記しようとしています。エンジニアではなく初心者です。どなたかご教授いただけないでしょうか?よろしくお願い致します。
以下のgmail内の重複している項目の内容を個別に転記すること試みています。
(例)
[連絡先1]
名前:○○○○
クラス:●●●●
MAIL:××
LINE ID:▲▲▲
LINE QR :■■

[連絡先2]
名前:○○○
クラス:□□
MAIL:
LINE ID:△△
LINE QR :

[連絡先3]
名前:○○
クラス:
MAIL:
LINE ID:
LINE QR :

上記のgmailから、項目名:の右側の部分○○、●●の部分のみを抽出し、スプレッドシートに1行になる形で転記しようとしています。3項目めのMAIL:までの短いバージョンでは転記出来ました。でもLINE ID以降の2項目を同様に追加すると、エラーは出ずに実行されるものの、ログが出ずにスプレッドシートにも転記されない状態です。
どうかよろしくお願いします。

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

転記がされません。エラーメッセージはありません。

該当のソースコード

GAS

1function myFunction17() { 2 3 var start = 0; 4 var max = 500; 5 var threads = GmailApp.search('メールタイトル',start,max); 6 var messe = GmailApp.getMessagesForThreads(threads); 7 8 for(var i = 0; i < messe.length; i++) { 9 for(var j = 0; j < messe[i].length; j++) { 10 var date = threads[i].getMessages()[j].getDate(); 11 var body = messe[i][j].getPlainBody(); 12 13 const regex =/名前:(.*?)\r\n(.*?)クラス:(.*?)\r\n(.*?)MAIL:(.*?)\r\n(.*?)'LINE ID:'(.*?)\r\n(.*?)'LINE QR:'(.*?)\r\n/g; 14 15 //文字列を発見できない場合次へ飛ぶ 16 if(!body.match(regex)){ 17 continue; 18 } 19 var data =body.match(regex).map(x=>{ 20 var Name = /名前:(.*?)\r\n/.test(x)? RegExp.$1 : ''; 21 var Class = /クラス:(.*?)\r\n/.test(x)? RegExp.$1 : ''; 22 var Mail = /MAIL:(.*?)\r\n/.test(x)? RegExp.$1 : ''; 23 var Linenum = /'LINE ID:'(.*?)\r\n/.test(x)? RegExp.$1 : ''; 24 var Lineqr = /'LINE QR:'(.*?)\r\n/.test(x)? RegExp.$1 : ''; 25 return [Name, Class, Mail, Linenum, Lineqr]; 26 }); 27 28 //横並びにしたいので配列を1列に変更 29 const arrayFlat = data.flat(); 30 31 //[Ljava.lang.Object;@57e数字 等と書き込み出来なくなったのを防ぐ 32 var Renraku = String(arrayFlat); 33 34 // 書き込むシートを取得 35 var sheet = SpreadsheetApp.getActive().getSheetByName('test2'); 36 37 // 最終行を取得 38 var lastRow = sheet.getLastRow() + 1; 39 40 sheet.appendRow([date,Renraku]); 41 Logger.log([date,Renraku]); 42 43 //1つのセル内で連続してしまったデータをセルに分割 44 var range = sheet.getRange(lastRow,2); 45 range.splitTextToColumns(); 46 }; 47 }; 48};

試したこと

const regex =の所のLINE IDをそのまま記載すると文字色がピンクだったので文字を''で囲み(名前:と同様の)赤い文字になるようにしました。合わせて下のvarの部分も同様にしました。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

regex で定義されている部分が一言一句間違ってないか見直しましょう。
たとえば メール本文の方はLINE QR : の部分は、 全角コロンの前に半角スペースがあったりします。

const regex =の所のLINE IDをそのまま記載すると文字色がピンクだったので文字を''で囲み(名前:と同様の)赤い文字になるようにしました。合わせて下のvarの部分も同様にしました。

↑これは不要です。

投稿2021/09/23 06:22

sawa

総合スコア3002

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

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

syosinsya7777

2021/09/23 08:09 編集

ご回答下さいましてありがとうございます。 varの部分のLINE IDの後のスペースの入力を間違えていました。 const regex とvarの部分の''を外して、念のため両方ともメール本文からコピペしてLINE IDとQRの部分を修正しました。 無事転記出来ました! ありがとうございました。
sawa

2021/09/23 08:17

修正箇所が見つかったようでなによりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問