2012年8月13日月曜日

指定した日付のイベント一覧を取得する

ある特定の日付のイベント一覧を取得するには、Calendar クラスの getEventsForDay
メソッドを使用する。
  
  
【構文】
CalendarObject.getEventsForDay(date)
  
date : Date 型。対象の日付を指定する。
戻り値 : CalendarEvent 型の配列。引数で指定日付のイベントの配列を返す。
  
  
【例】
function GetEventList() {
  var objCalendar = CalendarApp.getDefaultCalendar()
  var objEvents = objCalendar.getEventsForDay(new Date("2012/08/13"));
  var intMaxIndex = objEvents.length;
  for (var intIndex = 0; intIndex < intMaxIndex; intIndex++) {
    Logger.log(objEvents[intIndex].getTitle() + " " + 
                  objEvents[intIndex].getStartTime() + " " + 
                  objEvents[intIndex].getEndTime());
  }
}
  
  
上記コードを実行すると、デフォルトカレンダーの 2012 年 8 月 13 日 のイベントの
件名、開始日時、終了日時がログ上に表示される。

イベントの開始、及び、終了日時を取得する

イベントの開始・終了日時を取得するには、CalendarEvent クラスの getStartTime メソッド、
及び、getEndTime メソッドをそれぞれ用いる。
  
  
【構文1】
CalendarEvenObject.getStartTime()
  
戻り値 : Date 型。イベントの開始日時を返す。
  
  
【構文2】
CalendarEvenObject.getEndTime()
  
戻り値 : Date 型。イベントの終了日時を返す。

イベントの件名を取得する

イベントの件名を取得するには、CalendarEvent クラスの getTitle メソッドを使用する。
  
  
【構文】
CalendarEventObject.getTitle()
  
戻り値 : String 型。件名の文字列を返す。

「終日のイベント」を新規に追加する

「終日のイペント」を新規に追加する場合は、Calendar クラスの createAllDayEvent メソッド
を使用する。
  
  
【構文】
CalendarObject.createAllDayEvent(title, date, args)
  
title : String 型。新規イベントの件名を指定する。
date : Date 型。イベントの日付を指定する。
args : Object 型。省略可。拡張引数。詳細は下記の通り。
戻り値 : CalendarEvent 型。新規追加したイベントオブジェクトを返す。
  
- args に指定する引数 -
description : String 型。新規イベントの説明を指定する。
location : String 型。イベントの場所を指定する。
guests : String 型。イベントに招待するゲストのメールアドレス。複数の場合はコンマ
             区切り。
sendInvites : Boolean 型。上記ゲストにメールを送信する場合はtrue、そうでない場合
                    はfalse。
  
  
【例】
function CreateAllDayEvent() {
  var objCalendar = CalendarApp.getDefaultCalendar();
  var objEvent = objCalendar.createAllDayEvent
("会議1", 
                                                  new Date("2012/08/13"), 
                                                  {description:"極秘会議",
                                                   location:"最上階A会議室",
                                                   guests:"ora1@gmail.com, ora2@gmail.com",
                                                   sendInvites:true});
}

  
  
ここで、問題発生!上記のサンプルコードを実行すると、何故か 2012年 8 月 12 日の終日
イベントとして登録されてしまう。日付を変えても、引数で指定した日の一日前になってしまう。
バグなのか、上のコードの書き方が悪いのか定かではない。

カレンダーに新規イベントを追加する

カレンダーに新たにイペント(予定)を追加する場合は、Calendar クラスの createEvent
メソッドを使用する。
  
  
【構文】
CalendarObject.createEvent(title, startTime, endTime, args)
  
title : String 型。新規イベントの件名を指定する。
startTime : Date 型。イベントの開始日時を指定する。
endTime : Date 型。イベントの終了日時を指定する。
args : Object 型。省略可。拡張引数。詳細は下記の通り。
戻り値 : CalendarEvent 型。新規追加したイベントオブジェクトを返す。
  
- args に指定する引数 -
description : String 型。新規イベントの説明を指定する。
location : String 型。イベントの場所を指定する。
guests : String 型。イベントに招待するゲストのメールアドレス。複数の場合はコンマ
             区切り。
sendInvites : Boolean 型。上記ゲストにメールを送信する場合はtrue、そうでない場合
                    はfalse。
  
  
以下にサンプルコードを二つ記す。例1 はイベントと開始、終了日時のみを指定する
コード、例2 はイベントの詳細説明や場所等、より詳細に指定するコードである。
  
  
【例1】
function CreateEvent1() {
  var objCalendar = CalendarApp.getDefaultCalendar();
  var objEvent = objCalendar.createEvent("会議1", 
                                                  new Date("2012/04/16 13:30:00"), 
                                                  new Date("2012/04/16 16:30:00"));
}
  
  
【例2】
function CreateEvent2() {
  var objCalendar = CalendarApp.getDefaultCalendar();
  var objEvent = objCalendar.createEvent("会議1", 
                                                  new Date("2012/04/16 13:30:00"), 
                                                  new Date("2012/04/16 16:30:00"),
                                                  {description:"極秘会議",  
                                                   location:"最上階A会議室",
                                                   guests:"ora1@gmail.com, ora2@gmail.com",
                                                   sendInvites:true});
}

カレンダーの名前を取得する

カレンダーの名前を取得する場合は、CalendarクラスのgetName メソッドを使用する。
  
  
【構文】
CalendarObject.getName()
  
戻り値 : string 型。カレンダー名の文字列が返される。
  
  
【例】
function GetCalendarName() {
  //デフォルトカレンダーの名前
  var objCalendar = CalendarApp.getDefaultCalendar();
  Logger.log("デフォルトカレンダーの名前 : " + objCalendar.getName());
  //指定したカレンダーの名前
  var objCalendars = CalendarApp.getCalendarsByName("遊びの予定");
  Logger.log("カレンダーの名前 : " + objCalendars[0].getName());
}
  
  
今、カレントユーザーが
  
hogehoge@gmail.com
  
とした場合、上記コードを実行の結果、ログには
  
デフォルトカレンダーの名前 : hogehoge@gmail.com
カレンダーの名前 : 遊びの予定
  
と表示される。このことから、デフォルトカレンダーの名前は、カレンダーの所有者
の Gmail のアドレスがカレンダーの名前となるのようである。

既存のカレンダー(オブジェクト)を取得する

既存のカレンダーオブジェクトを取得する場合は、CalendarApp クラスの
getCalendarsByName メソッドを用いる。
  
  
【構文】
CalendarApp.getCalendarsByNam(name)
  
name : string 型。取得したいカレンダーの名前を指定する。
戻り値 : Calendar 型の配列。指定した名前のカレンダーオブジェクトの配列を返す。
  
  
Google カレンダーは同一の名前で複数のカレンダーを指定できるらしい。従って、
名前で取得する場合は、複数のカレンダーが取得してしまう可能性があるので要注意。
もっとも、個人で同じ名前のカレンダーを作ることは稀かも知れないが。
  
  
【例】
function GetCalendarByName() {
  var cals = CalendarApp.getCalendarsByName("遊びの予定");
  Logger.log(cals.length + " 個のカレンダーが見つかりました"); 
}