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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Q&A

1回答

3215閲覧

Gmailの内容をGoogle Driveのスプレッドシートに読み込む方法について

ryuichiro

総合スコア9

Google Apps Script

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

0グッド

0クリップ

投稿2017/07/31 07:32

###Gmail本文の表をそのままコピペして番号を整理したい

お疲れ様です。
毎日送付されてくる特定の件名のメールを
送られてきたら、都度新しくシートを作成してそのシートにコピペ。
みたいなことをGoogle Apps Scriptで自動化できるシステムを作っています。

###特定の件名のメールを検索し、最新のメールの本文を取得

function getMail() { /* メールを検索し本文を変数に保存 */ var threads = GmailApp.search('subject:Softbank Daily Results - SIM Box Detection'); // メールを検索し一覧を取得 var thread_top = threads[0]; // そのうちいちばん新しいメールを取得 var mail_body = thread_top.getMessages()[0].getPlainBody(); // 本文のテキストを取得 var mail_body_split = mail_body.split(/\r\n|\r|\n/); // メールの本文を改行ごとに配列に格納 /* シート名用にタイムスタンプを取得 */ var now_time = new Date(); // 現在のタイムスタンプを取得 var timestamp = now_time.getFullYear()+"/"+(now_time.getMonth()+1)+"/"+now_time.getDate(); // タイムスタンプを整形(YYYY/MM/DD) /* シートを追加(シート名はタイムスタンプ */ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); objSpreadsheet.insertSheet(timestamp); /* シートの移動(上記で作成したシートに移動) */ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName(timestamp); spreadsheet.setActiveSheet(sheet); /* セルにデータを追加(A1のセル) */ for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする) } }

さらっとスクリプトの流れを書きますと、、、
① 特定の件名のメールを検索し、最新のメールの本文を取得
② シートを作成する前に、シート名をその日の「年/月/日(YYYY/MM/DD)」にするためのタイムスリップを取得
③ ②で取得したタイムスリップ名のシートを追加
④ ③で作成したシートをアクティブ化(セルに本文を挿入するため)
⑤ ④でアクティブ化したシートに本文を挿入

###スクリプト実行した結果、本文の表情報が挿入されない
対策として、⑤セルにデータを追加(A1セル)
sheet.getRange('A1').setValue(mail_body);

イメージ説明

リンク内容

今回作成したスクリプト内容では、メールの本文を全てテキストで取得しているため、
表はまだ作り出せていません。
欲しい結果はメールの本文から表の情報をそのまま引っ張り出して
スプレッドシートで見れるようにしたいです。

アドバイス頂けますでしょうか。

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

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

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

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

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

guest

回答1

0

HTMLメール上の表をそのままスプレッドシートにコピペしたら、ちゃんとした表として
展開されるのかもしれませんが、それはブラウザががんばってくれているからだと思います。

どうしてもこのやり方で実装しようとするなら、
0. メールがエンコードされていれば(UTF-8の平文に)デコードする
0. HTMLのTABLEとして展開されている部分をパースして、それぞれのセルに配置するようなスクリプトを書く

ということになるんだと思いますが、なんだか不毛な作業のような気がします。

もともとのシステムからの出力のひとつとして HTML メールが送出されているのだと
思いますが、そのシステムに直接アクセスして、API 経由で取り出すといったアプローチ
は取れないものなんでしょうか?

投稿2017/08/01 01:26

hotta

総合スコア1613

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

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

ryuichiro

2017/08/01 03:15

スクリプト作業のアドバイスありがとうございます。 確かに不毛な作業かもしれませんね。 システムにアクセスしてAPI経由でデータ取り出す方法があるのですね。 その点おススメできる有効なAPI情報はございますでしょうか。 Google APPsで用意されているAPIではGmailからSpreadsheetに アップロードするというアプローチはあるのでしょうか。 (Spreadsheetにデータを自動反映させるアドオンを活用する等)
hotta

2017/08/01 03:19 編集

メールの本文になった時点でもはや「任意の文字列」でしょうから、それを (書式化された)スプレッドシート等に展開するのは難しそうな気がします。 私が API と申し上げたのは、Google のものではなく、メールとして 送り出しているシステムそのもの(今回はSDBとやら?)です。
ryuichiro

2017/08/04 03:24

ご返信遅れました。 メール先のシステムへ直接アクセスには別途調整が要りますが検討します。 自前のScriptでスプレッドシートへ自動収集できるレベルにまでもっていきたいのですが、リファレンスできる有効な情報はありますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問