定期イベントをカレンダーに登録する Googleカレンダーアプリ③

定期的に繰り返されるイベントも一度にまとめてカレンダーに登録できると便利ですね。
シリーズ②までに作ったスクリプトに数行手を加えるだけでそれも可能になります。
では、やっていきましょう!

createEventSeries(title, startTime, endTime, recurrence, options)

シリーズ②の完成コードに手を加えたのは4カ所です。

まず、関数名をcreateWeeklyEventAndInviteとしました。

定期イベント作成の1番のポイントは、createEvent( )メソッドをcreateEventSeries( )メソッドに変えることです。

定期イベントをどんな風に繰り返すのか、そのルールを決めるのが、変数recurrenceです。
今回のサンプルは、毎週同じ曜日で指定した期間繰り返すというルールにしました。
recurrenceは、第4引数になります。

「指定した期間」をスプレッドシートから取得するため、「期間」という列を1列増やしました。
そのため、取得列数が7から8に1つ増えています。
そして、その値をtermという変数に格納し、until( )の引数に渡します。

繰り返しルールは様々なパターンで設定できますので、関心のある方はぜひ公式リファレンスで研究してみてください。

繰り返したい定期イベントに「期間」を年月日で指定します。
「済」チェックを外します。
サンプルでは、「清洲会議」が5月末までの毎週月曜日にカレンダーに登録されます。

テスト実行

まず、スプレッドシートのカスタムメニューに「Weeklyイベント登録&招待」を追加しましょう。
実行する関数は、createWeeklyEventAndInviteです。
参照

「Weeklyイベント登録&招待」をクリックして、テストを実行します。

カレンダーを開くと、5月の毎週月曜日に「清洲会議」が登録されました!

addWeeklyRule( )メソッドは、デフォルトではシリーズの最初のイベント(今回の例だと5月1日)と同じ曜日に繰り返し実行されます。

繰り返しを回数で指定 times(times)

「指定した期間」ではなく、「指定した回数」を繰り返すことも可能です。
まず、スプレッドシートに「回数」の列をもう1列追加します。
そして、繰り返す回数を入力します。
サンプルは3回とします。

これに合わせて、スクリプトの方も3カ所変更します。
取得列数が1列増えたので、8から9に変更します。
回数を格納する変数timesを追加します。
until( )メソッドをtimes( )メソッドに変えて、変数timesを引数に渡します。
until( )メソッドのコードはコメントアウトします。

実行してみましょう。

カレンダーを開いてみると、



うまくいきました!

完成コード

// 定期イベントの登録と招待
function createWeeklyEventAndInvite() {
  const calendar = CalendarApp.getDefaultCalendar(); // デフォルトカレンダーの取得

  // 「イベント」シートからイベントデータを取得する
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('イベント');
  const startRow = 2;
  const numRows = sheet.getLastRow() - 1;
  const values = sheet.getRange(startRow, 1, numRows, 9).getValues();

  // 「名簿」シートからメールアドレスを取得する
  const sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('名簿');
  const numRows2 = sheet2.getLastRow() - 1;
  const mailData = sheet2.getRange(startRow, 2, numRows2, 1).getValues().flat();
  const mailList = mailData.join(",");

  for (let i = 0; i < values.length; i++) {
    // 各行から要素を変数に格納して引数を準備
    const [check, title, day, startTime, endTime, location, description, term, times] = values[i];
    if (check == "済") {
      continue; 
    }
    const startDate = createDateTime(day, startTime);
    const endDate = createDateTime(day, endTime); 
    const options = {
    location: location,
    description: description,
    guests: mailList,
    sendInvites:true
    };

    // 定期イベントの作成 until()かtimes()かどちらか選択
    const recurrence = CalendarApp.newRecurrence().addWeeklyRule().until(new Date(term));
    // const recurrence = CalendarApp.newRecurrence().addWeeklyRule().times(times);
    const event = calendar.createEventSeries(title, startDate, endDate, recurrence, options);

    // ゲスト表示の設定
    const guestsCanSeeGuests = false;
    event.setGuestsCanSeeGuests(guestsCanSeeGuests);

    // 登録済みのイベントを「済」とする
    sheet.getRange(startRow + i, 1).setValue("済");
  }
}

シリーズ目次:Googleカレンダーアプリ①〜④

  1. スプレッドシートからGoogleカレンダーに予定を登録する Googleカレンダーアプリ①
  2. イベントの招待メールを一括送信する Googleカレンダーアプリ②
  3. 定期イベントをカレンダーに登録する Googleカレンダーアプリ③
  4. イベントのゲストにリマインドメールを自動送信する Googleカレンダーアプリ④

最後までご覧いただき、ありがとうございます!

GASGカレンダー

Posted by botw