カテゴリー
 管理者向けサンプル

Google スプレッドシートから Google カレンダー に予定を出力

このサンプルでは、Google スプレッドシートで予定を入力し、Google カレンダーに出力するコードを記載しています。

以下のリンクからサンプルシートがコピー可能です。まずはカレンダー反映したいGoogle アカウント を選択し、スプレッドシート をコピーしてお使いください。

Google カレンダーの操作サンプル ※スプレッドシートをコピーするGoogle アカウントが必要です
予定をGoogle カレンダー で確認する

スプレッドシート をコピーしたら、適当な日付に予定を入力し、以下の出力ボタンをクリックしてください。その後カレンダーのリンクを確認すると、予定が反映されています。

<応用編>

1.カレンダー ID の認識

スプレッドシートから任意のカレンダーに出力します。

まずはカレンダー ID を確認します。自分のカレンダーはカレンダーの設定から「カレンダーの統合」を開くと載っています。

もっと簡単に先程のスプレッドシート の Apps Script からこれを確認する方法もあります。

まずは以下のスクリプトを先程コピーしたスプレッドシートのメニューの拡張機能>Apps Scriptで開いてみましょう。

すでにコードが書かれていますが、その下に以下のコードをはりつけて、以下のアイコンから保存します。

/**
 * Lists the calendars shown in the user's calendar list.
 * @see https://developers.google.com/calendar/api/v3/reference/calendarList/list
 */
function listCalendars() {
  let calendars;
  let pageToken;
  do {
    calendars = Calendar.CalendarList.list({
      maxResults: 100,
      pageToken: pageToken

    });
    if (!calendars.items || calendars.items.length === 0) {
      Logger.log('カレンダーがありません。');
      return;
    }
    // Print the calendar id and calendar summary
    for (const calendar of calendars.items) {
      Logger.log('%s (ID: %s)', calendar.summary, calendar.id);
    }
    pageToken = calendars.nextPageToken;
  } while (pageToken);
}

左側のサービス からGoogle Calendar API を選択して追加します。

次に上部のメニュー上から listCalendars のファンクションを選び実行します。

スクリプトの下部の実行ログに、カレンダーの名前とIDが表示されます。

2.任意のカレンダーに予定を書き出すようにスクリプトを変更

開いているスクリプトの15行目の以下の部分を書き換えます。これでデフォルトのカレンダーではなくカレンダーIDで指定しているカレンダーへの書き出しを指示します。

let Calendar = CalendarApp.getDefaultCalendar();
          ↓
let Calendar = CalendarApp.getCalendarById();

次に実行ログで出てきたカレンダー ID をコピーして、以下の部分に ” ” のコテーションマークとともに入力します。あるいは入力した文字を選択しながらShift + 2 をしても、文字列として認識します。

getCalendarById(CALENDAR_ID);
↓
getCalendarById(”abcdefg”);

プロジェクトを保存して、スプレッドシートに戻り、日付部分の出力ボタンを押すか、メニューから Convert2Calender を実行すると、今度は別のカレンダーに予定が反映されます。カレンダーから予定が反映されているか確認ができます。

<おまけ – カレンダーの予定をスプレッドシートに書き出し>

最後にカレンダーの予定をスプレッドシートに書き出してみましょう。

最初にコピーしたスプレッドシートにシートを1枚追加します。

Apps Script に戻って一番下に以下のコードを貼り付けてみましょう。

以下の部分は適当に書き出したい期間を変更します。

const startTime = new Date(‘2022/04/01 00:00:00’); //スプレッドシートに書き込みたい期間のはじめの日付を変更して記述
const endTime = new Date(‘2022/12/01 00:00:00’);//スプレッドシートに書き込みたい期間の終わりの日付を変更して記述

function getCalendarEvents() {
  var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
  const CALENDAR_ID = 'xxxxxxxxxxx'; //カレンダーIDを取得
  
  //ヘッダを入力
  mySheet.getRange("A1").setValue("イベント名");
  mySheet.getRange("B1").setValue("開始時間");
  mySheet.getRange("C1").setValue("終了時間");
  mySheet.getRange("D1").setValue("イベント登録者名");

  const calendar = CalendarApp.getCalendarById(CALENDAR_ID);  
  const startTime = new Date('2022/04/01 00:00:00'); //スプレッドシートに書き込みたい期間のはじめの日付を変更して記述
  const endTime = new Date('2022/12/01 00:00:00');//スプレッドシートに書き込みたい期間の終わりの日付を変更して記述
   
  const events = calendar.getEvents(startTime, endTime);
  const values = [];
  
  for(const event of events){
    const record = [
      event.getTitle(),
      //event.getStartTime(),
      Utilities.formatDate(event.getStartTime(),"GMT+0900","yyyy年MM月dd日 HH時mm分") ,//文字列に変換
      //event.getEndTime(),
      Utilities.formatDate(event.getEndTime(),"GMT+0900","yyyy年MM月dd日 HH時mm分"),//文字列に変換
      event.getCreators()[0]
    ];
    values.push(record);
  }
 
  SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
}

前と同様、カレンダー ID は表示したいものを入力します。保存して getCalendarEvents 関数を選び、実行します。

スプレッドシート上に該当する期間のカレンダーの内容が反映されているかと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です