見出し画像

【GAS】Google Apps Script 活用事例 Meet URL付きの予定を一度に複数登録するスクリプト

Meet URL付きの予定を登録したい

採用事務のお仕事には、やれ定期面談だの何だので、数十件単位で予定を登録したいケースが山のようにあります。

今までのやり方だとMeet URLの生成が自動にならず、それこそ数十回クリックしていました。数十件にもなると、Meet URLのつけ忘れがないか確認するだけで結構大変です。

登録サンプル
シートの記載通りに4件の予定登録に成功
定期面談の登録例
定期面談の登録例 Meet URLもしっかり付いています。

今回は、上記で紹介されているスクリプトを参考に、手を加えてみました。

サンプルファイル

ファイル > コピーを作成を押してお使いください。

スクリプト全文

/**
 * Meet URL付きのカレンダーを登録する
 * https://auto-worker.com/blog/?p=6252
 * 
 * @param  {Object.<string | number>} 予定の名前や、開始時刻、終了時刻、詳細欄に記載するメモなど
 * @return {string} 新規登録された予定のイベントID
 * 
 */
function registerEventsWithMeetUrl_(object) {
  const calendarId = Session.getActiveUser().getUserLoginId();

  //GoogleカレンダーでMeet会議が設定されるイベント登録パラメータを設定
  const eventParam = {
    conferenceData: {
      createRequest: {
        conferenceSolutionKey: {
          type: "hangoutsMeet"
        },
        requestId: "123" //123のままでも問題ないし、適当で問題ない
      }
    },
    summary: object.title,//カレンダータイトル
    description: object.description,
    start: {
      dateTime: object.startTime
    },
    end: {
      dateTime: object.endTime
    },
    attendees: object.attendees,
  };

  //CalendarAPIに対し、Meet会議付き予定を追加
  const event = Calendar.Events.insert(eventParam, calendarId, {conferenceDataVersion: 1});
  console.log('登録成功');
  console.log(`イベントID:${event.id}`);

  return event.id

}

function registerEventsFromSheetValue() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet       = spreadsheet.getSheetByName('登録用シート');
  const values      = sheet.getDataRange().getValues();
  const header      = values.shift();
  
  const column = {
    eventId:     header.indexOf('イベントID'),
    title:       header.indexOf('イベント名'),
    date:        header.indexOf('イベント予定日'),
    startTime:   header.indexOf('開始時刻'),
    endTime:     header.indexOf('終了時刻'),
    attendees:   header.indexOf('出席者'),
    description: header.indexOf('イベント詳細'),
    status:      header.indexOf('登録ステータス'),
  }

  console.log(column);

  let count = 0;
  
  for(let i = 0; i < values.length; i++){
    //二重登録防止のため、イベントIDが空白かつ、登録済みが付いていない予定のみを登録する。
    if(values[i][column.eventId] === '' && values[i][column.status] === ''){
      
      //開始時刻
      const startTime = new Date(values[i][column.date]);
      startTime.setHours(values[i][column.startTime].getHours());
      startTime.setMinutes(values[i][column.startTime].getMinutes());
      
      //終了時刻
      const endTime = new Date(startTime);
      endTime.setHours(values[i][column.endTime].getHours());
      endTime.setMinutes(values[i][column.endTime].getMinutes());
      
      const row = i + 2;
      console.log(`処理中:${row} 行目`);
      
      //sendInvites、登録と同時にメールで通知する機能をオフにしたいのだが見つからず...
      const object = {
        title:       values[i][column.title],
        startTime:   Utilities.formatDate(startTime, 'JST', "yyyy-MM-dd'T'HH:mm:ss.000+09:00"),
        endTime:     Utilities.formatDate(endTime, 'JST', "yyyy-MM-dd'T'HH:mm:ss.000+09:00"),
        description: values[i][column.description],
        attendees:   generateAttendees_(values[i][column.attendees]),
      }

      const eventId = registerEventsWithMeetUrl_(object);

      sheet.getRange(row, 1).setValue(eventId);
      sheet.getRange(row, 8).setValue('登録済');

      count += 1;

    }
  }
  console.log(`登録件数: ${count} 件`);
}

/**
 * 'attendees': [{'email': 'lpage@example.com'},{'email': 'sbrin@example.com'}],
 * registerEventsWithMeetUrl_()内で、上記のように指定すると出席者を登録する事が出来る
 *
 * @param  {string} string - 'aiueo@sample.com, abc@sample.com'
 * @return {Array.<Object.<string>}
 */

function generateAttendees_(string){
  const newArray = string.split(',').map(email => ({'email': email}));
  console.log(newArray);
  return newArray
}

Google Calendar APIのオンを忘れずに

サービスの下に、Calerndarと表示されます

公式レファレンス
javascriptでの実装例

オブジェクトの指定方法

小さくテストする


/**
 * Meet URL付きのカレンダーを登録する
 * https://auto-worker.com/blog/?p=6252
 * 
 * @param {Object.<string | number>} 予定の名前や、開始時刻、終了時刻、詳細欄に記載するメモなど
 * 
 * 
 */
function registerEventsWithMeetUrl_(object) {
  const calendarId = Session.getActiveUser().getUserLoginId();
  //GoogleカレンダーでMeet会議が設定されるイベント登録パラメータを設定
  const eventParam = {
    conferenceData: {
      createRequest: {
        conferenceSolutionKey: {
          type: "hangoutsMeet"
        },
        requestId: "123"
      }
    },
    summary: object.title,//カレンダータイトル
    description: object.description,
    start: {
      dateTime: object.startTime
    },
    end: {
      dateTime: object.endTime
    },
    attendees: [
      object.attendees
    ],
  };

  //CalendarAPIに対し、Meet会議付き予定を追加
  Calendar.Events.insert(eventParam, calendarId, {conferenceDataVersion: 1});
  console.log('登録成功');

}


function myFunction(){
  const object = {
    title:       'meet付きURLテスト',
    startTime:   "2023-02-08T01:00:00.000+09:00",
    endTime:     "2023-02-08T02:00:00.000+09:00",
    description: '登録テスト',
    attendees:   {'email': 'sample@gmail.com'},
  }
  registerEventsWithMeetUrl_(object);
}

この記事が気に入ったらサポートをしてみませんか?