2014年10月30日木曜日

Google Apps Script(GAS) を使い Gmail と スプレッドシートの連携


目的
Google Apps Script(GAS)を利用して、
Gmailで受信した特定のメールを
Googleのスプレッドシート(spread sheet)へ書き写す。



動作概要
・該当メールはGmailでラべリング(フォルダ分け)をしておく
(メール受信時)
unseenラベル

(スプレッドシートへ記票後)
seenラベル

※ラベル名は任意である。
ただし、ツール内で本ラベルを利用する。


・メール内容
以下のフォーマットのメールを受信するとする。
(本文)
name: piyo
age: 30

※各行終わりにGmail上で</ br>タグが付与されている。


・スプレッドシート
作成したスクリプトを実行すると、
メールを元に、シートの最下段へnameとageを追記していく。
また、担当者がcheck欄に"o"を入れると
その行がグレーアウトするような仕掛けも用意する。

 --------------------
| name | age | check |
|------|-----|-------|
| hoge |  20 |   o   |
| piyo |  30 |       | ← 受信したメールが追加される



GASの使い方概要
Googleドライブ ->
作成 ->
スプレッドシート ->
ツール ->
スクリプトエディタ ->

スクリプトエディタを開くと、Code.gsファイル内に
function myFunction() {} 関数が表示されている。
ここにコードを書いていけばよい。

一点、勘違いがないように。
JavaScriptはWebブラウザ側で動作するが、
GASはサーバ側で動き、実行結果がWebブラウザーに表示される。

例えば、デバッグ目的でJavaScriptでなじみのあるalert()関数を
使おうと思っても利用できない。

ちなみに、代替としては下でいける。
ダイアログでメッセージを表示できる。

function myFunction() {
  Browser.msgBox("msg test");
}

また、ログに吐かせることもデバッグには有効だろう。
Logger.log("log test");

ログはスクリプトエディタ内の
View ->
Logs
で確認できる。

ただし、スクリプトエディタのデバッグ機能が充実しているので、
変数の確認などはこれを使えばいいだろう。



コード
一目だと思うので詳細な解説は省略する。
注意があるとすると、threadsという変数名を使っているところだろうか。
プログラムを並列させる処理のスレッドではない。
Gmailでは最初のメールからそれへの返信はすべて1つにまとめられる。
そのメッセージ群の集合をスレッドという。

簡易図にするまでもないが、変数名から受ける誤解を
少なくするために念のためここに記載する。

threads -> thread == messages -> message
                                 message
           thread == messages -> message
                                 message


最終行だけ少し説明が必要だろうか。
e.source.getActiveSheet().getRange(row, 1, 1, column).setBackground(color);
 --- --- --- 
|   |   | o |
 --- --- --- 
      ↓
 --- --- --- 
|   |   | o |
 --- --- --- 

0 件のコメント:

コメントを投稿