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

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

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

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

Gmail

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

Google Apps Script

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1018閲覧

[GAS]Gmailの指定ラベルから未読メール本文の一部を取得してスプレッドシートに記載し既読にするスクリプト

ZENSH

総合スコア2

Google スプレッドシート

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

Gmail

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

Google Apps Script

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2019/08/21 21:07

編集2019/09/08 18:47

ネット記事にてGmailから指定ラベルの本文をシートに反映させる方法は解ったのですが、
以下の方法を探すことができず、teratailのユーザーに聴いてみようと思い投稿させていただきました。

流れ

1.トリガー起動(解る)
2.対象ラベルの未読メール取得(解る)
3.本文取得(解る)
4.対象行を加工してA列B列の最終行へ格納(解らない)
5.取得メールを既読に変更(解る)

メール本文に記載されている対象行の内容としては以下のようなデータになります。

ABCD(Unit):B012345678(50),B123456789(20),B234567890(20),//以降データが続き改行で終了

この行の部分を↓のようにシートへ反映したい。

A列B列
B01234567850
B12345678920
B23456789020

これをGASでどのようにコーディングすれば良いかで力尽きました。

該当行のデータについて

固定:ABCD(Unit):
変動:B012345678(50)

変動部分:10文字の英数字と括弧内は数字が入ります。括弧内の数字部分は1桁~4桁の場合があります。

参考にしたGmail取得スクリプト
https://yatta47.hateblo.jp/entry/2015/11/03/215540

必要な部分のみに一部編集したコード

function gmailLabelGet(){ var sh= SpreadsheetApp.getActive(); var sh_To = sh.getSheetByName('aaaaa');//出力先シート名 var start = 0; var count = 0; var max = 500; var threads = GmailApp.search('label:xxxxxxxxx is:unread', start, max); count = threads.length; for (var i = 0; i < count; i++ ){ var message = threads[i].getMessages(); for (var j = 0; j < message.length; j++){ Logger.log(message[j].getBody()); //ここでデータ加工? sh_To.appendRow(加工後データ);//該当シート最終行へ格納 message[j].markRead();//既読処理 } } }

なにとぞお力添えください。

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

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

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

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

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

guest

回答2

0

GAS

1var reg1 = /([A-z]{1}.{9})(([0-9]*))(,|\n)/g; 2var reg2 = /$1\t$2\n/g; 3var basearrayA = message[j].getBody().match(reg1); 4var basearrayB = message[j].getBody().match(reg2); 5//各配列を2次元配列に変更 6var arrayA = [] 7var arrayB = [] 8for(var i =0;i<basearrayA.length;i++){ 9 arrayA.push([basearrayA[i]]) 10} 11for(var i =0;i<basearrayB.length;i++){ 12 arrayB.push([basearrayB[i]]) 13}

こんな感じで、arrayAとarrayBをそれぞれA列B列に追記するのでいかがでしょうか?

投稿2019/08/23 08:37

hiroshi0240

総合スコア640

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

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

ZENSH

2019/09/10 14:40

お返事が遅れましたことをお詫び申し上げます。 大変参考になりました。 こちらを参考にして自己解決致しました。
guest

0

自己解決

以下の方法で、自己解決しました。

しかし、コード的には綺麗じゃない気がしています。
もっとスマートに記述できるかたの投稿をお待ちしております。

GAS

1function gmailLabelGet(){ 2 3 var sh= SpreadsheetApp.getActive(); 4 var sh_To = sh.getSheetByName('aaaaaaa');//出力先シート名 5 var label = 'label:xxxxxxxxx'+' is:unread';//Gmailラベル 6 var reg = /([A-z]{1}.{9})(([0-9]*))/g; 7 var rep1 = /([A-z]{1}.{9})/g; 8 var rep2 = /(.+?)/g; 9 var output = []; 10 var start = 0; 11 var count = 0; 12 var max = 500; 13 var threads = GmailApp.search(label, start, max); 14 count = threads.length; 15 16 for (var i = 0; i < count; i++ ){ 17 var message = threads[i].getMessages(); 18 19 for (var j = 0; j < message.length; j++){ 20 var basearray0 = message[j].getBody().match(reg); 21 message[j].markRead();//既読処理 22 23 for (var k = 0; k < basearray0.length; k++){ 24 output[k] = [basearray0[k].match(rep1)[0],basearray0[k].match(rep2)[0].replace('(','').replace(')','')]; 25 sh_To.appendRow(output[k]);//該当シート最終行へ格納 26 } 27 } 28 } 29}

投稿2019/09/09 18:29

編集2019/09/12 18:51
ZENSH

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問