0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Googleカレンダーの予定をGASで他のマイカレンダーに自動コピーする方法

Last updated at Posted at 2024-08-18

使える場面

  • マイカレンダーBを共有追加で共有したいがマイカレンダーAを先輩に共有済みで相手のカレンダーに2つ自分のカレンダーが入ってしまうのは申し訳ない。
  • 本職、副業、プライベートのマイカレンダーを作成しているが、副業のカレンダーだけ共有しないで、本職とプライベートのカレンダーを統合したものを上司に共有したい。

方法

今回は本業、副業、プライベートのマイカレンダーを作成しており、それぞれ統合したい場合を想定して実装していきたいと思います。

  1. マイカレンダーで本業、プライベート統合版を作成する。
  2. 統合版に定期的に本業とプライベートの予定を自動でコピーされるようにGASでコードを書く。

準備

  1. Googleカレンダーの右上の設定を開くスクリーンショット 2024-08-18 22.43.17.png

  2. 統合したいマイカレンダーのカレンダーIDをコピー
    スクリーンショット 2024-08-18 22.43.17.png

ここで取得したカレンダー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');

トリガーの設定

トリガーを選択
スクリーンショット 2024-08-18 23.14.38.png

トリガーを作成
スクリーンショット 2024-08-18 23.15.23.png

下記の4つの関数のトリガーをそれぞれ作成します。
関数を選択して「時間の間隔を選択(時間)」をそれぞれ決めていきます。

syncEventsForToday→1時間おき
syncEventsForTommorow→6時間おき
syncEventsAfter2To14Days→12時間おき
syncEventsAfter15To180Days() →1日おき

上記の設定でトリガーを4つ作成できればOKです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?