前回の記事でGmailから未読メールを取得するというところを学んだので、今回は取得したメールをスプレッドシートに記録していくというところをやっていこうかと思います。メール取得をトリガーにしてスプレッドシートを更新していく方法を覚えると例えば、会社ホームページからの問い合わせの内容をスプレッドシートに保管し問い合わせの管理や分析に役立てることができたります。ここまでやると実用度も大分上がってくるのでマスターしていくと良いかと思います。
※ Gmailからメールを取得するくだりは「【初心者向け】GASでGmailの新着(未読)メールを取得する【コピペでOK】」で詳しく解説しています。
メール内容をスプレッドシートに書き込むスクリプト
まずは完成版を見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
function getNewMail() { // 未読のスレッドを検索対象にする var searchCondition = 'is:unread'; var threads = GmailApp.search(searchCondition, 0, 50); // 書き込むシートを選択する var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadSheet.getSheetByName('test'); for (var i = 0 ; i < threads.length; i++) { var msgs = GmailApp.getMessagesForThread(threads[i]); for (var j = 0; j < msgs.length; j++) { Logger.log(msgs[j].getSubject()); // 2行目に行を追加して書き込む sheet.insertRows(2); sheet.getRange(2, 1).setValue(msgs[j].getDate()); sheet.getRange(2, 2).setValue(msgs[j].getFrom()); sheet.getRange(2, 3).setValue(msgs[j].getSubject()); sheet.getRange(2, 4).setValue(msgs[j].getPlainBody()); } // スレッドを既読にする threads[i].markRead(); } } |
こんな感じです。上のスクリプトはテスト用に「test」シートを作ってそこに書き込む用にしていますので同じように作成をしてください。
「test」シートを作成したら、コピペして実行してみましょう。例のごとくスプレッドシートへのアクセス権限を求められますので対応してください。
エラーなく実行できましたでしょうか?エラーが起こらなければ、「test」シートを確認しメールの内容が書き込まれていることを確認してください。
スクリプト解説
実行できたらスクリプトについて見ていきましょう。
対象のシートを指定
1つのスプレッドシートには複数のシートを作成することができるのでどのシートを使うかをまずは指定する必要があります。
その部分が以下です。
1 2 3 4 5 |
// 書き込むシートを選択する var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadSheet.getSheetByName('test'); |
「SpreadsheetApp.getActiveSpreadsheet();」で現在のスプレッドシートを選択肢、そのスプレッドシートの「test」シートを取得するのが「spreadSheet.getSheetByName('test');」の部分です。GASを使えばたったの2行で実行可能です。
シートに値を書き込む
シートを指定したらそのシートに値を書き込んで行きます。シートの更新を手動でやる場合は一番先頭に行を挿入してその行に値を書き込んでいくかと思います。この作業を再現していきます。それが下記の部分です。
1 2 3 4 5 6 7 8 |
// 2行目に行を追加して書き込む sheet.insertRows(2); sheet.getRange(2, 1).setValue(msgs[j].getDate()); sheet.getRange(2, 2).setValue(msgs[j].getFrom()); sheet.getRange(2, 3).setValue(msgs[j].getSubject()); sheet.getRange(2, 4).setValue(msgs[j].getPlainBody()); |
選択中のシートに対して「insertRows(2)」を行うと、「2行目に列を挿入」というアクションが実行されます。
そして、「getRange(2, 1).setValue(何か)」は指定したセルに値を入れてくれということを意味します。getRangeでセルを指定する方法はA1セルを(1, 1)としてそこから右にnセル、下にmセル移動したセルを(1+n, 1+m)と指定します。
また今回の値はGmailのメッセージの受信日や送信元、件名、本文を取得しています。例えば「getPlainBody()」は本文取得を意味しています。他にも様々な情報が取得できます。もっと知りたい方はGmailMessageに関する公式リファレンスをご参照ください。
以上でスプレッドシートへの書き込みについては終了です。1個1個大まかにでも理解をしていくといろんなことができるようになるのでコツコツ頑張っていきましょう。
Googleアプリを仕事で使うなら「G Suite」がおすすめ
ポイント
- 「@gmail.com」ではなく独自のドメインを使用できる
- Googleドライブ内のファイルをチーム内で共有するのが簡単
- カレンダーでのスケジュール共有が簡単
- 30GBの保存領域が利用可能
- ユーザー管理やセキュリティー対策も簡単に設定可能
など大切な情報を管理するためのサービスが充実しています。これだけの機能が月680円で利用が可能。14日間の無料トライアルもあって安心してトライできます。さらに今なら12ヵ月間ずっと20% OFFのクーポンを利用可能です。ぜひご活用ください。
G Suite Basic プラン用クーポン【637M3P6GYFACVQL】
G Suite Business プラン用クーポン【M6RFUAM9R7NQWYH】