LoginSignup
34

More than 3 years have passed since last update.

posted at

updated at

CSV 形式のイベント一覧情報を Google カレンダーに一括登録する 2 つの方法 #GoogleAppsScript

はじめに

Google カレンダーでイベントを一括登録する方法を 2 つ紹介します。

  1. CSV をカレンダーにインポートする方法
  2. Google Apps Script を用いてスプレッドシートから登録する方法

1 と 2 の方法によって、登録できる情報が異なります。 1 の方法で済むなら、 1 でやった方が手続きが楽だと思います。参加者を登録する必要があれば、 2 の方法を選択する必要があります。

以下に詳細な手順を記載します。

1. CSV をカレンダーにインポートする方法

公式ヘルプ を参考に、 CSV ファイルを作成。

  • Subject
    • 予定の名前(必須)
  • Start Date
    • 予定の開始日(必須)
  • Start Time
    • 予定の開始時刻
  • End Date
    • 予定の終了日
  • End Time
    • 予定の終了時刻
  • All Day Event
    • 終日の予定であるかどうかを指定します。終日の予定の場合は「True」、そうでない場合は「False」と入力します
  • Description
    • 予定の説明やメモ
  • Location
    • 予定の場所
  • Private
    • 予定を限定公開にするかどうかを指定します。限定公開の場合は「True」、限定公開でない場合は「False」と入力します

スクリーンショット 2018-08-22 20.01.37.png
https://calendar.google.com/ にアクセスして、 + ボタンを選択。

スクリーンショット 2018-08-22 20.01.46.png
メニューから インポート を選択。

スクリーンショット 2018-08-22 20.02.12.png
パソコンからファイルを選択 をクリックし、上記のフォーマットに従ったファイルを選択。

2. Google Apps Script を用いてスプレッドシートから登録する方法

以下のサンプルのスプレッドシートをもとに、イベント一覧を作成。コピーを自分のアカウントにコピーしてきていじってください。
https://docs.google.com/spreadsheets/d/1yoiwKPBs-FwGYq-zZkQza2B7VYpvvqcM0tCLDSyFiR8/edit#gid=0

スクリーンショット 2018-08-22 20.25.48.png
https://script.google.com/ にアクセスして、新規スクリプトを選択。

スクリーンショット 2018-08-22 20.28.16.png
https://github.com/tanabee/spreadsheet-to-calendar/blob/be1c6e755bbc2aa05fc739252bb1e76c1b9cfb90/main.js のスクリプトを Google Apps Script のエディタに貼り付け。

以下全文。

// 設定
function getConfig() {
  return {
    spreadSheetId: '',// スプレッドシートの ID を入力。
    spreadSheetTabName: ''// スプレッドシートのタブ名を入力。
  }
}

// カレンダーにイベントを登録
function registerAll() {
  var config      = getConfig();
  var spreadSheet = SpreadsheetApp.openById(config.spreadSheetId);
  var sheet       = spreadSheet.getSheetByName(config.spreadSheetTabName);
  var eventIds = sheet
    .getDataRange()
    .getValues()
    .filter(function (e, i) {
      return i !== 0 && e[6] === '';
    }).map(function (e) {
      var calendarEvent = CalendarApp.getDefaultCalendar().createEvent(
        e[0], e[1], e[2],
        {
          description: e[3],
          location: e[4],
          guests: e[5]
        });
      return [calendarEvent.getId()];
    });

  if (eventIds.length === 0) return;

  sheet.getRange('G2:G' + (eventIds.length+1) ).setValues(eventIds);
}

// 登録されたイベントをキャンセルして、シートから削除
function cancelAll() {
  var range       = 'G2:G1000';
  var config      = getConfig();
  var spreadSheet = SpreadsheetApp.openById(config.spreadSheetId);
  var sheet       = spreadSheet.getSheetByName(config.spreadSheetTabName);
  sheet
    .getRange(range)
    .getValues()
    .filter(function (eventId) {
      return eventId[0] !== '';
    }).forEach(function (id) {
      CalendarApp.getDefaultCalendar().getEventById(id).deleteEvent();
    });
  sheet.getRange(range).clear();
}

spreadSheetId にスプレッドシートの ID を入力。
spreadSheetTabName にスプレッドシートのタブ名を入力。

スクリーンショット 2018-08-22 20.32.02.png
関数を選択 > registerAll を選択して ▶ ボタンをクリック。(取り消したいときは cancelAll を選択して実行)

スクリーンショット 2018-08-22 20.38.14.png
これが

スクリーンショット 2018-08-22 20.37.59.png
こう登録されます。

GAS だと 50 行くらいでサクッとできて良いですね。以上。

関連記事

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
What you can do with signing up
34