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

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

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

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

Google Apps Script

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

Q&A

1回答

237閲覧

スプレッドシートで複数回出てくる同じ文字列を出す

souchou

総合スコア7

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/04/21 01:13

編集2020/04/21 10:45

Gmailの本文に複数出てくる文字列をスプレッドシートに送り出したいです。
現在、一つは抽出できるのですが、二つ目以降のデータを出すにはどうすればいいですか?

Gmail
商品名 : バナナ
発送予定:2020年4月20日 から順次発送
価格 : 200円
個数 : 1個
小計 : 200円

商品名 : リンゴ
発送予定:2020年4月20日 から順次発送
価格 : 200円
個数 : 1個
小計 : 200円

上記メールで、商品名・個数の部分を抽出したいです。

function RegExpForm() { var sheet = SpreadsheetApp.getActiveSheet(); var thds = GmailApp.search('label:"商品購入通知" is:unread ', 0, 20); var messe = GmailApp.getMessagesForThreads(thds); for(var i = 0; i < messe.length; i++) { for(var j = 0; j < messe[i].length; j++) { var date = thds[i].getMessages()[j].getDate(); var body = messe[i][j].getPlainBody(); var regBiz = new RegExp('注文ID : ' + '.*?' + '\r' ); var Biz = body.match(regBiz)[0].replace('注文ID : ', '').replace('\r', ''); var regGoods = new RegExp('商品名' + '[\s\S]*?' + '\r' ); var Goods = body.match(regGoods)[0].replace('商品名 : ', '').replace('\r', ''); var regKosu = new RegExp('個数 : ' + '.*?' + '\r' ); var Kosu = body.match(regKosu)[0].replace('個数 : ', '').replace('\r', '').replace('個',''); var res = body.split('/\r\n|\r|\n/'); sheet.appendRow([date, Biz, Goods, Kosu]); thds[i].markRead(); } } }

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

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

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

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

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

guest

回答1

0

javascript

1const q255192 = () => { 2 const sheet = SpreadsheetApp.getActiveSheet(); 3 const threads = GmailApp.search('label:"商品購入通知" is:unread ', 0, 20); 4 const messages = GmailApp.getMessagesForThreads(threads); 5 messages.forEach(ms => { 6 ms.forEach(m => { 7 const date = ms.getDate(); 8 const data = parser(m.getPlainBody()); 9 data.order.forEach(e=>sheet.appendRow([date,data.id,...e])); 10 m.markRead(); 11 }); 12 ms.markRead(); 13 }); 14} 15const parser = (text) => { 16 const lines = text.split("\n"); 17 const idExpression = "注文ID : "; 18 const itemExpression = "商品名 : "; 19 const numsExpression = "個数 : "; 20 const startswithId = lines.filter(e=> e.indexOf(idExpression) === 0).map(e=>e.slice(idExpression.length)); 21 const id = startswithId.length === 0 ? "noid" : startswithId[0]; 22 const items = lines.filter(e=>e.indexOf(itemExpression) === 0).map(e=>e.slice(itemExpression.length)); 23 const nums = lines.filter(e=>e.indexOf(numsExpression) === 0).map(e=>e.slice(numsExpression.length,-1)); 24 return {"id":id,order:items.map((e,i)=>[e,nums[i]])}; 25}

投稿2020/04/26 13:56

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問