Google Calendar 特定のキーワードを含む予定を別のGoogle Calendarにコピペする 自動化

02_投資

最近更新できてませんが、ちょっと学習に充てないといけない用事が3つほど重なってまして、また、役立つ情報が整理できれば、個別記事にしていきます。

今回は、息抜きがてら、業務の一部を自動化した件を書いていこうかと思った次第です。


皆さんはGoogleCalendarは利用されますか?業務で利用することがあるのですが、会社内の標準のスケジュール管理アプリがあるので、どちらを使うかは人によって異なっていたりします。

すべての人に対してうまく立ち回るには2つとも使わないといけない、わけのわからない状態を解決していく1つの案です。

①GoogleCalendarって便利ですが、会社などの組織内で、標準のスケジュール管理アプリがあったりして、両方使わないといけないことってあると思います。(私がそうです)

②GoogleCalendar推しの人が多いと、部署で管理するアカウントが別にあったり、して2重でなくて3重で管理しないといけないことってあると思います。(私がそうです)

正直、2重以上の管理って本当に非生産的で、阿保の所業だと日ごろから、思ってたり、発言したりしているわけですが

形式的には組織内の標準スケジュール管理アプリを使うのが正しいのですが、GoogleCalendarの便利さも理解はするので、2重管理しない形で、両方使う感じにしていくわけです。

①のところは、属している組織によってやり方が異なるので、頑張ってくださいとしか言えないのですが、②の部分は、GoogleCalendar→GoogleCalendarなので、意外と簡単にできます。

まずは、何が簡単か?ということを把握する必要があります。

簡単なルールです”Googleが提供するモノ同士は連携が簡単”

なので、Googleスプレッドシート+GASでプログラムを書いてしまいます。

変数はそれぞれ各々変更したいと思うので、変数はスプレッドシートに記載する形式として、

GPTに命令を下し、コードを出力してもらいます。

で、できたコードが以下

function copyMatchingEventsFromSheetConfig() {
  // スプレッドシート「設定」シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('設定');

  // セルから設定値を取得
  const sourceCalendarId = sheet.getRange('B1').getValue();
  const targetCalendarId = sheet.getRange('B2').getValue();
  const keyword = sheet.getRange('B3').getValue();
  const daysToFetch = Number(sheet.getRange('B4').getValue());

  // ログで確認
  Logger.log('SourceCalendarID: ' + sourceCalendarId);
  Logger.log('TargetCalendarID: ' + targetCalendarId);
  Logger.log('Keyword: ' + keyword);
  Logger.log('DaysToFetch: ' + daysToFetch);

  // カレンダー取得
  const sourceCalendar = CalendarApp.getCalendarById(sourceCalendarId);
  const targetCalendar = CalendarApp.getCalendarById(targetCalendarId);

  // 日付範囲
  const now = new Date();
  const future = new Date();
  future.setDate(now.getDate() + daysToFetch);

  // イベント取得
  const events = sourceCalendar.getEvents(now, future);

  for (const event of events) {
    const title = event.getTitle();
    const description = event.getDescription();

    // キーワードがタイトルまたは説明に含まれているか
    if (title.includes(keyword) || description.includes(keyword)) {
      targetCalendar.createEvent(
        title,
        event.getStartTime(),
        event.getEndTime(),
        {
          description: description,
          location: event.getLocation(),
          guests: event.getGuestList().map(g => g.getEmail()).join(','),
        }
      );
    }
  }
}

変数はスプレッドシートに書きます。

スプレッドシートのシート名を”設定”に変更し、

B1セルにコピー元のCalendarIDを入力、CalendarIDはメールアドレスのあるアカウントならそれを入力すればよい。メールアドレスが分からない場合、設定画面からCalendarIDを確認できます。

歯車アイコンからCtrl+Fで”カレンダー ID”と検索すれば~@group.calendar.google.comみたいなのが見つかるので、メールアドレスがないアカウント(グループアカウント)ならこれです。

B2の方にはペースト先のCalendarIDを入力

B3は特定のキーワードですね、各自自由に。

B4は対象日数ですね。

あとは、スプレッドシートの拡張機能タブからAppsScriptを開いて、上のコードをコピペ、保存、実行

初回の実行のみ、権限の許可が必要なので、許可してあげてください。許可しないなら使えません。

あと、画面左のストップウォッチみたいなアイコンの”トリガー”設定で、1日1回自動で実行するようにしておけば、特定のキーワードを含むスケジュールのみが、自分のスケジュールから、グループのスケジュールに転記されるので、情報共有しやすいってだけです。

コメント

タイトルとURLをコピーしました