使える場面
- マイカレンダーBを共有追加で共有したいがマイカレンダーAを先輩に共有済みで相手のカレンダーに2つ自分のカレンダーが入ってしまうのは申し訳ない。
- 本職、副業、プライベートのマイカレンダーを作成しているが、副業のカレンダーだけ共有しないで、本職とプライベートのカレンダーを統合したものを上司に共有したい。
方法
今回は本業、副業、プライベートのマイカレンダーを作成しており、それぞれ統合したい場合を想定して実装していきたいと思います。
- マイカレンダーで本業、プライベート統合版を作成する。
- 統合版に定期的に本業とプライベートの予定を自動でコピーされるようにGASでコードを書く。
準備
ここで取得したカレンダーIDはメモ帳などに貼っておきましょう。
コード
全体コード
var calendar_shared = CalendarApp.getCalendarById('aaaaaaaaaaaaaaaaa');
var calendar_b = CalendarApp.getCalendarById('bbbbbbbbbbbbbbbbbb');
var calendar_c = CalendarApp.getCalendarById('zzzzzzzzzzzzzzzzzz');
function getEventsForDays(calendar, start_date, days) {
if (days == 0) {
var events = calendar.getEventsForDay(start_date);
return events;
} else {
var end_time = new Date(start_date.getTime() + (days * 24 * 60 * 60 * 1000));
var events = calendar.getEvents(start_date, end_time);
return events;
}
}
function deleteEventsForDay(calendar, start_date, days) {
var events = getEventsForDays(calendar, start_date, days);
events.forEach(function(e) {
e.deleteEvent();
});
}
function copyEventsForDay(from_calendar, to_calendar, start_date, days) {
var events = getEventsForDays(from_calendar, start_date, days);
events.forEach(function(e) {
if (e.isAllDayEvent()) {
var startTime = e.getStartTime();
var endTime = new Date(e.getEndTime().getTime());
to_calendar.createAllDayEvent(e.getTitle(), startTime, endTime, {
description: e.getDescription(),
location: e.getLocation()
});
} else {
to_calendar.createEvent(e.getTitle(), e.getStartTime(), e.getEndTime(), {
description: e.getDescription(),
location: e.getLocation()
});
}
});
}
function syncEventsForDay(start_date, days) {
deleteEventsForDay(calendar_shared, start_date, days);
copyEventsForDay(calendar_b, calendar_shared, start_date, days);
copyEventsForDay(calendar_c, calendar_shared, start_date, days);
}
function syncEventsForToday() {
var today = new Date();
syncEventsForDay(today, 0);
}
function syncEventsForTommorow() {
var today = new Date();
var tomorrow = new Date(today.getTime() + (1 * 24 * 60 * 60 * 1000));
syncEventsForDay(tomorrow, 0);
}
function syncEventsAfter2To14Days() {
var today = new Date();
var two_days_after = new Date(today.getTime() + (2 * 24 * 60 * 60 * 1000));
var fifteen_days_after = new Date(two_days_after.getTime() + (14 * 24 * 60 * 60 * 1000));
syncEventsForDay(two_days_after, 14);
}
function syncEventsAfter15To180Days() {
var today = new Date();
var fiften_days_after = new Date(today.getTime() + (15 * 24 * 60 * 60 * 1000));
syncEventsForDay(fiften_days_after, 165);
}
下記のコードの('')にカレンダーIDを設定
カレンダーID
var calendar_shared = CalendarApp.getCalendarById('aaaaaaaaaaaaaaaaa');
var calendar_b = CalendarApp.getCalendarById('bbbbbbbbbbbbbbbbbb');
var calendar_c = CalendarApp.getCalendarById('zzzzzzzzzzzzzzzzzz');
トリガーの設定
下記の4つの関数のトリガーをそれぞれ作成します。
関数を選択して「時間の間隔を選択(時間)」をそれぞれ決めていきます。
syncEventsForToday→1時間おき
syncEventsForTommorow→6時間おき
syncEventsAfter2To14Days→12時間おき
syncEventsAfter15To180Days() →1日おき
上記の設定でトリガーを4つ作成できればOKです。