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の機能もあります。