概要
会社のメールが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はスプレッドシートに紐付いてないので、動きません。(SpreadsheetApp.getActiveSpreadsheet()
がnull)
コード
var MAIL_ADDRESS = "example@example.com";
function myFunction() {
var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId());
var sheet = ss.getSheetByName("進捗一覧");
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>");
tableList.push("<table" + style + ">");
for(i=0;i<items.length;i++) {
var study = [];
for(j=0;j<sheet.getLastColumn();j++) {
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")});
}
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;
}
}
};
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メインの人はプライベートでも色々使っていけるのかも。
参考
追記(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"));
}