見出し画像

【GAS】Google Apps Script 活用事例 複数の採用メンバーの面接対応件数を取得するスクリプト

実は、去年の10月に転職しました。
前職でも面接日程をスプシに書き出したいなぁと思って、いくつか記事を書いてきました。

最近、Chat GPTを使ってGASを書いたりしているのですが、適格に指示を与えて、自分が欲しいアウトプットを得るって思いの外難しいものです。なので色々なユースケースで書いておくと後の自分のためになるかなと思っています。

function setValues(){
  const values = getUniqueEvents();
  SpreadsheetApp.getActiveSheet().getRange(1, 1, values.length, values[0].length).setValues(values);
}



/**
 * Googleカレンダーから取得した面談の情報
 * 
 * @param  {Array.<string>} calIds - カレンダーのIDの1次元配列
 * @param  {number} offset - 数字
 * @return {Array.<Object.<string>>}
 * 
 */
function getUniqueEvents() {
  let results = [];

  // 取得したい採用メンバーのカレンダーID
  const calIds = ['nobi.nobita@sample.jp', 'sizuka@sample.jp', ];
  calIds.forEach(calId => {
    const events = getEventsByQuery_(calId, '面談');
    results = results.concat(events); // 各ループで生成されたイベントを結果に追加する。
  });
 
 // eventIDを元に重複を削除する
  const uniqueEvents = Array.from(new Set(results.map(event => event.eventId)))
  .map(eventId => results.find(event => event.eventId === eventId));
  console.log(uniqueEvents);
 
 // 2次元配列に変換する
  const newValues = uniqueEvents.map(event => Object.values(event));
  console.log(newValues);
  return newValues
  
}



/**
 * n日後の予定を取得する
 * 
 * @param  {string} calId - カレンダーID 通常はメールアドレス
 * @param  {number} offset - .setDateの引数
 * @param  {string} query - 新卒など、カレンダータイトルに一致するもの
 * @return {Array.<Object.<string>>}
 * 
 */
function getEventsByQuery_(calId, query) {
  const cal = calId ? CalendarApp.getCalendarById(calId) : CalendarApp.getDefaultCalendar();
  const startTime = new Date('2023-10-01T00:00:00');
  const endTime  = new Date('2024-02-29T23:59:59');
  const events = cal.getEvents(startTime, endTime)
    .filter(event => event.getTitle().includes(query))
    .map(event => ({
      eventId: event.getId(),
      title: event.getTitle(),
      startTime: Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy/MM/dd (E) HH:mm'),
    }));
  console.log(events);
  console.log(`query: ${calId}, 面談予定 ${events.length} 件`);
 
  return events;
}



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