GASでGoogleカレンダーのルーチン作業を自動化!①

こんにちは。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実装の解説

getDefaultCalendarメソッド

CalendarAppオブジェクト.getDefaultCalendar()で自分のカレンダーオブジェクトを取得します

var calendar = CalendarApp.getDefaultCalendar();//
この一文で自分のカレンダーを取得します。これはカレンダークラスのオブジェクトです。

getCalendarsByNameメソッド

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メソッド

カレンダーオブジェクトに対してgetEvents(start,end)で
startからendまでのイベントを配列で取得する事ができます

取得したイベントの配列を自分のカレンダーに登録します。

createAllDayEventメソッド

カレンダーオブジェクトに対して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カレンダーのルーチン作業を自動化!の記事も合せてご覧ください!

※下記ファイルをコピーしてお使いください。「ツール → スクリプトエディタ」でスクリプトも見れるようになります。
祝日カレンダー登録 サンプルファイル

請求書の受け取りはsweeepで自動化

【AI請求書処理】従来の請求書OCRでは対応できない非定型帳票や

自動会計仕訳も、sweeepなら対応可能!最短で即日導入、

面倒な設定不要。手軽に導入して請求業務を効率化。