top of page

Google CalenderをGASで複製同期する方法

人から共有されているカレンダーがなぜかiPhoneに反映されない...

じゃあ,新しいカレンダーに同期させて自分のカレンダーにしちゃえ!!

という発想から。


カレンダーの数を増やせば複数カレンダーを一つにまとめたり,スケジュールのタイトルだけ消して,空き時間カレンダーをほかの人に公開したり...

使い道は多いかと。


以下,コード。

なお,参照コードはこちらで→

エラーの修正やマイナーチェンジを行いました。

設定は上URLを参考にしてください。


---


var calendar_shared = CalendarApp.getCalendarById('to calender id'); var calendar_b = CalendarApp.getCalendarById('from calender id'); function getEventsForDays(calendar, start_date, days) { if (days == 0) { var events = calendar.getEventsForDay(start_date); return events; } else { var start_time = new Date(start_date.getTime()) var end_time = new Date(start_date.getTime() + (days * 24 * 60 * 60 * 1000)); var events = calendar.getEvents(start_time, 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 dt = e.getStartTime(); dt.setDate(dt.getDate()+1); var dt1 = e.getEndTime(); dt1.setDate(dt1.getDate()+1); to_calendar.createAllDayEvent(e.getTitle(), dt, dt1, {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); } 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 syncEventsAfter2To60Days() { var today = new Date(); var two_days_after = new Date(today.getTime() + (2 * 24 * 60 * 60 * 1000)); syncEventsForDay(two_days_after, 60); }

---


閲覧数:532回0件のコメント
bottom of page