概要
会社のメールがGoogle Appsになったので、スプレッドシートやらGoogleドライブと色々連携を試しています。
で、連携をするために使用するのがGoogle Apps Script(略称GAS)ですが、殆どJavaScriptなので超簡単!
とりあえず、スプレッドシートで作った簡易的な進捗管理をメールで送信するようなGASを作成してみました。
実際にはGASは定期的に実行する機能もあるので、毎日朝8~9時に送信するようにしています。
仕様
- 以下の様なスプレッドシートを読み込んで、進捗が完了の列以外をメールする。
No. | やること | 担当 | 進捗 | 期日 | 備考 |
---|---|---|---|---|---|
1 | あれをやる | 田中 | ちょっとだけ | 2015/04/25 | がんばる |
2 | これをやる | 鈴木 | 完了 | 2015/03/25 | すぐやる |
3 | それをやる | 高橋 | 半分くらい | 2015/04/15 | そのうち |
- 送信されるメール
スプレッドシート及びGASのサンプル
※このGASはスプレッドシートに紐付いてないので、動きません。(SpreadsheetApp.getActiveSpreadsheet()
がnull)
コード
var MAIL_ADDRESS = "example@example.com"; function myFunction() { var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId()); var sheet = ss.getSheetByName("進捗一覧"); // シートの名前 // 進捗が100%以外のタスクのIndexを取得 var index = getHeadIndex(sheet, "進捗"); var range = sheet.getRange("a1"); var items = []; for(i=0;i<sheet.getLastRow();i++) { if(range.offset(i, index).getValue() != "完了") { items.push(i); } } var style = " style='border:1px #000000 solid;border-collapse:collapse;'"; var tableList = []; tableList.push("<p>タスク一覧</p>"); //データを取得し、HTMLのテーブルを作成。 tableList.push("<table" + style + ">"); for(i=0;i<items.length;i++) { // iは行のIndex var study = []; for(j=0;j<sheet.getLastColumn();j++) { // jは列のIndex var value = range.offset(items[i], j).getValue(); if(Object.prototype.toString.call(value) == "[object Date]") { value = formatDate(value); } else { value = value.toString().replace("\n", "<br/>"); } study.push(value); } tableList.push("<tr" + style + "><td" + style + ">" + study.join("</td><td" + style + ">") + "</td></tr>"); } tableList.push("</table>"); GmailApp.sendEmail(MAIL_ADDRESS, "進捗連絡", "body", {htmlBody : tableList.join("\n")}); } /** * 指定された名前のHeadを検索し、Indexを返す */ var getHeadIndex = function(sheet, name) { var range = sheet.getRange("a1"); for(i=0;i<sheet.getLastColumn();i++) { if(range.offset(0, i).getValue() == name) { return i; } } }; // DateをYYYY/MM/DD形式に変換する var formatDate = function(date) { var format = 'YYYY/MM/DD'; format = format.replace(/YYYY/g, date.getFullYear()); format = format.replace(/MM/g, ('0' + (date.getMonth() +1)).slice(-2)); format = format.replace(/DD/g, ('0' + date.getDate()).slice(-2)); return format; };
まとめ
上のコードはテーブルで表示させているのでやたら長くなっていますが、データ取得するだけ、メール送るだけなら簡単!
Gmailメインの人はプライベートでも色々使っていけるのかも。
参考
- Google Apps Script入門(ドットインストール)
- とりあえずこれやっとけばOK
- 公式リファレンス
- 英語ですがかなり充実。
- GASのScriptEditorオレオレチートシート
- 「Ctrl + r」で実行と、「Ctrl + Enter」でログ表示。その他色々。
追記(2016/12/22)
単純にメールすればどうすれば良いの?っとコメントいただいたのでシンプルなものを追記します。
各メソッドなどは公式リファレンスを参照してください。
仕様
- 以下の様なスプレッドシートを読み込んで、単純にテキストでメールする。
スプレッドシート
No. | やること | 担当 |
---|---|---|
1 | あれをやる | 田中 |
2 | これをやる | 鈴木 |
3 | それをやる | 高橋 |
送信されるメール
コード
var MAIL_ADDRESS = "example@example.com"; function myFunction() { var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId()); var sheet = ss.getSheetByName("進捗"); // シートの名前 var lastRowIndex = sheet.getLastRow(); var range = sheet.getRange(2, 1, lastRowIndex - 1, 3); var values = range.getValues(); var bodyList = values.map(function(value, index) { return ("No : " + value[0] + "\nやること : " + value[1] + "\n担当 : " + value[2]); }); GmailApp.sendEmail(MAIL_ADDRESS, "進捗連絡", bodyList.join("\n")); }