URLをコピーしました!
スキルアップを始める!

【GAS】Googleスプレッドシートに予定一覧を作成しics(iCalendar形式)形式でGoogleカレンダーにエクスポートする

GAS(GoogleAppsScript)

Googleスプレッドシートから直接ICS形式でエクスポートする機能がデフォルトでは提供されていません。代わりに、Google Apps Scriptを使用してスプレッドシートからiCalendar形式を作成して、カレンダーにイベントを追加する方法を試してみます。

Google Apps Scriptの有効化

スプレッドシートを開き、上部のメニューから「拡張機能」 > 「Apps Script」を選択してGoogle Apps Scriptエディタを開きます。

generateICS関数

GASで以下のようなコードを準備します。

function generateICS() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();

  // ICS ヘッダ
  var icsContent = "BEGIN:VCALENDAR\nVERSION:2.0\n";

  for (var i = 1; i < data.length; i++) {
    var event = {
      'summary': data[i][0], // イベント名
      'start': new Date(data[i][1]), // 開始日時
      'end': new Date(data[i][2]), // 終了日時
      'location': data[i][3], // 場所
      'description': data[i][4], // 説明
    };

    // ICS イベント
    icsContent += "BEGIN:VEVENT\n";
    icsContent += "SUMMARY:" + event.summary + "\n";
    icsContent += "DTSTART:" + formatDate(event.start) + "\n";
    icsContent += "DTEND:" + formatDate(event.end) + "\n";
    icsContent += "LOCATION:" + event.location + "\n";
    icsContent += "DESCRIPTION:" + event.description + "\n";
    icsContent += "END:VEVENT\n";
  }

  // ICS フッタ
  icsContent += "END:VCALENDAR\n";

  // ICS ファイルの内容をログに表示
  Logger.log(icsContent);
}

// 日時のフォーマットを変換するヘルパー関数
function formatDate(date) {
  return Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyyMMdd'T'HHmmss'Z'");
}
  1. スクリプトの概要:
    • generateICS 関数は、アクティブなスプレッドシートからデータを取得し、それを元にiCalendar形式のテキストを生成します。
    • 各行が1つのイベントに相当し、各列がイベントの詳細情報を提供します。
  2. ICS ヘッダとフッタ:
    • BEGIN:VCALENDAREND:VCALENDAR でiCalendarファイルの開始と終了を示します。
    • VERSION:2.0 はiCalendarのバージョンを指定しています。
  3. イベントの処理:
    • 各行のデータからイベント情報を取得し、それをiCalendarの形式に変換しています。
    • BEGIN:VEVENTEND:VEVENT で各イベントの開始と終了を示しています。
  4. 日時のフォーマット:
    • formatDate 関数は、日時のフォーマットを変換するためのヘルパー関数です。
  5. ログへの表示:
    • Logger.log(icsContent) によって生成されたiCalendarコンテンツがログに表示されます。
  6. 注意点:
    • data 配列のインデックスが i = 1 から始まっているため、スプレッドシートの最初の行はヘッダー行と仮定されています。
    • new Date(data[i][1]) および new Date(data[i][2]) では、スプレッドシートからの日付文字列のパースが行われています。適切なフォーマットが必要です。

権限を確認

実行すると、いつものように権限の確認画面になるので、権限を与えます。

.ics形式で保存する

書き出されたテキストデータを、任意のディレクトリに設定します。

BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:メインのカレンダー
X-WR-TIMEZONE:Asia/Tokyo
BEGIN:VEVENT
DTSTART;VALUE=DATE:18991230
DTEND;VALUE=DATE:18991231
DTSTAMP:20231220T152710Z
UID:290qui0i77156md3r4t4201rqc@google.com
CREATED:20231113T032232Z
LAST-MODIFIED:20231113T032232Z
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:18991230
DTEND;VALUE=DATE:18991231
DTSTAMP:20231220T152710Z
UID:4ab5vqggoue3dbu5lja75cdlto@google.com
CREATED:20231113T032232Z
LAST-MODIFIED:20231113T032232Z
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT

URLでインポートする

  • Google Calendarにログインし、「他のカレンダー」 > 「URLで追加」を選択します。
  • コピーしたiCalendarファイルのURLを貼り付けて追加します。

Google CalendarがiCalendarファイルを取得し、イベントを表示します。

まとめ

これで、Google Calendarが定期的にiCalendarファイルを取得し、イベントを表示します。生成されたiCalendarファイルは、公開したWebアプリケーションのURL経由でアクセスできるようにする必要があります。

会員登録するとご利用できます。
Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら