Google Apps Scriptでスプレッドシートを操作してみる
とあるタスク管理用にGoogleのスプレッドシートを利用しています。
スプレッドシートの利用時に、毎週行う作業が発生するので、
手運用は面倒だなということで、
Google Apps Scriptを利用してみることにしました。
行いたいことの情報としては以下の3点
1. 毎週月曜日に行いたい作業である
2. 「テンプレート」という名前のシートの「A1」欄に作業日の日付を入力(2012/04/12のような形式で)
3. 日付を変更した「テンプレート」をコピーして新たなシート(シート名は作業日の日付)を1枚作成する
この3つを実現するため、以下のようなスクリプトを作成しました。
function weeklyTask() { var SPREADSHEET_ID = 'スプレッドシートID'; var SHEET_NAME = 'テンプレート'; ss = SpreadsheetApp.openById(SPREADSHEET_ID); sheet = ss.getSheetByName(SHEET_NAME); sheet.getRange('A1').setValue(getToday()); sheet.copyTo(ss).setName(getToday()); } function getToday(){ var nowdate = new Date(); var year = nowdate.getFullYear(); // 年 var mon = nowdate.getMonth() + 1; // 月 var day = nowdate.getDate(); // 日 return(year + '/' + mon + '/' + day); }
SpreadsheetApp.openById(SPREADSHEET_ID);
これで、どのスプレッドシートかを指定しています。
スプレッドシートIDとは、スプレッドシートを開いているURLのkeyの値を確認して下さい。
(例:https://docs.google.com/spreadsheet/ccc?key=abcdefg#gid=3 これだと、IDは「abcdefg」です)
ss.getSheetByName(SHEET_NAME);
この部分で、シートの名前を指定してどのシートに対して操作するかを指示しています。
今回の場合は「テンプレート」という名前を指定しています。
sheet.getRange('A1').setValue(getToday());
sheet.getRangeの引数で指定したA1の欄に対して今日の日付をセットしています。
sheet.copyTo(ss).setName(getToday());
copyTo()というのが、シートコピーを実行する関数で、コピーしたシートの名前をsetNameで指定しています。
これで2,3の作業が実現できます。
最後に、1の毎週月曜日に行うという指定を、
「Script editor」→「リソース」→「すべてのトリガー」
という順に進んでトリガーの追加を行うことで実現します。
図で示したように時間をドリブンで関数(weeklyTask)を実行することができます。
このように非常に簡単に作業を自動化することができます。
ちなみに、自動処理が失敗した場合にメールで通知してくれるNotificationの機能もあります。