こんにちは。ITライターのTakaです!
今回はGoogleAppsScriptの記事をお届けしていきます!
今回はGoogleカレンダーを利用した業務の効率化についての記事です!
みなさんGoogleカレンダーを利用した事はありますか?
Googleカレンダーには予定の繰り返し機能や、通知機能、ユーザーの招待機能など便利な機能が数多くあります!
毎回決まった人に招待を送りたいが、人数が多すぎて手作業で入力するのは工数がかかる。Googleカレンダーと連携して、slackなどの他のアプリケーションを使っているが、カスタマイズに困っている。不定期に訪れる祝日を一々手作業で入力するのは面倒臭い。などなど、お困りの事があるかと思います。今回はGASでGoogleカレンダーを操作して、このような悩みを解決しようという記事です!!
祝日を自分のカレンダーに登録する方法
Googleカレンダーのデフォルトの設定では、日本の祝日が登録されていません。祝日で休みのはずなのに、仕事の予定を入れてしまった!、他の人の予定を入れてしまった!このような失敗を防ぐために、「GAS(GoogleAppsScript)」を使って、自分のカレンダーに祝日を取り込みましょう!
今回実装する事
- ①祝日カレンダーから祝日の名前、終了日、開始日を取得する。
- ②自分のカレンダーに一年分の祝日を登録する。
準備として
この画像のプラスボタンをクリックして
日本の祝日をカレンダーに追加してください
CalendarAppの実装手順
GASにはGoogleカレンダーを操作するためのCalendarAppというクラスがあります。
CalendarAppは上位のオブジェクトその下に主にカレンダーを操作するCalendar クラス、イベントを操作するCalendarEventというクラスが存在します。
CalendarApp→Calendar→CalendarEvent という順に操作していきます。
それでは実装していきましょう!
//日本の祝日を自分のグーグルカレンダーの予定に追加する関数 function addHolidays(){ //カレンダーを取得 var calendar = CalendarApp.getDefaultCalendar();// const calendars = CalendarApp.getCalendarsByName('日本の祝日'); var startDate=new Date(); //開始日の格納 var endDate=new Date(); endDate.setMonth(endDate.getMonth()+12); //終了日の格納とセット var holidays=calendars[0].getEvents(startDate,endDate); //祝日カレンダーのイベントを取得 //取得したカレンダーのイベントからタイトル、開始日、終了日を引っ張ってきて自分のカレンダーに登録する for(i=0;i<holidays.length;i++){ calendar.createAllDayEvent(holidays[i].getTitle(),holidays[i].getAllDayStartDate(),holidays[i].getAllDayEndDate()); } }
CalendarApp実装の解説
CalendarAppオブジェクト.getDefaultCalendar()で自分のカレンダーオブジェクトを取得します
var calendar = CalendarApp.getDefaultCalendar();//
この一文で自分のカレンダーを取得します。これはカレンダークラスのオブジェクトです。
CalendarAppオブジェクト.getCalendarsByName(name) で自分のアカウントに登録されているカレンダーの名前を引数に渡し、カレンダーの配列を取得する事ができます。
const calendars = CalendarApp.getCalendarsByName('日本の祝日');
Googleカレンダーが提供している日本の祝日がまとめられたカレンダークラスのオブジェクトです。
var startDate=new Date(); //取得開始日
var endDate=new Date();
endDate.setMonth(endDate.getMonth()+12); //取得終了日
今回は1年分の祝日を取得したいので、startDateに本日の日時を代入
setMonth(Date.getMonth()+12)
で一年後の日時を代入
getCalendarsByName(name)
の戻り値はカレンダーオブジェクトの配列なので、
calendars[0]
でカレンダーオブジェクトを取得してください。意外と詰まるポイントかもしれません!
カレンダーオブジェクトに対してgetEvents(start,end)で
startからendまでのイベントを配列で取得する事ができます
取得したイベントの配列を自分のカレンダーに登録します。
カレンダーオブジェクトに対してcreateAllDayEvent(title,start,end,[option])メソッドで
終日イベントの作成ができます。このスクリプトではoptionは指定していませんが、
{
description : ‘予定の説明’,
location : ‘場所’,
guests: ‘example@gmail.com’, //メールアドレスのカンマ区切りリスト
sendInvites : true //招待メールを送るかどうか デフォルトはfalse
}
の指定ができます。
ちなみに、日にちと時間を指定してイベントを作成する場合はcreatEvent(startTime,endTime,[option])
で作成できます。
取得したイベントの配列からfor文でイベントオブジェクトを取り出します。
イベントオブジェクトに対して、.getTitle() でタイトルをgetAllDayStartDate(),getAllDayEndDate() でそれぞれ開始、終了日時を取得できます。
getAllDayStartDate(),getAllDayEndDate() で取得した、イベントのタイトル、開始日、終了日を
createAllDayEvent(title,start,end,[option])
の引数に与えています。
これで祝日を自分のカレンダーの予定として、登録する事ができました!
今回のソースコードは下記のリンクからコピぺしてお使いください。
使い方
GASでGoogleカレンダーのルーチン作業を自動化!の記事も合せてご覧ください!
※下記ファイルをコピーしてお使いください。「ツール → スクリプトエディタ」でスクリプトも見れるようになります。
祝日カレンダー登録 サンプルファイル