メディア掲載: レバテックフリーランス様のサイトで当ブログが紹介されました

スプレッドシート+GASでGoogleカレンダーに予定を一括登録する

GoogleスプレッドシートのデータからGoogleカレンダーに一括登録するスクリプト(Google Apps Script)を作ってみました。

完成品

入力シート(シート名:create)に、スケジュールのデータを入力

カレンダーに登録するデータを入力するシート
色々なパターンのスケジュールを入力してみた(下3行は、わざと不正なデータを入力してみた)

スクリプトを実行すると、H列に処理結果が追記される

処理実行後のスプレッドシート
下3行は、わざと不正なデータを入力したため、失敗となっている

Googleカレンダーに予定が登録される

処理実行後のカレンダー

招待メール列に”Y”を入力したスケジュールについては、招待メールも送信される。(空白でなければ”Y”じゃなくてもOK)

招待メールも送信できる

スクリプト

スプレッドシートのツール > スクリプトエディタよりスクリプトエディタを起動し、コード.gsに下記のスクリプトを貼り付けます。

// カレンダー・スプレッドシートの取得
const calendar = CalendarApp.getCalendarById("xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com");
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("create");

function createEventsFromSheet(){
  // スプレッドシートのデータ取得
  const records = sheet.getDataRange().getValues();
  records.shift();

  // 処理結果配列
  const results = [];

  // イベント一括作成
  for ( const record of records ){

    // 任意項目の設定
    const options = {};
    if ( record[3] ){ options.description = record[3]; } // 説明
    if ( record[4] ){ options.location = record[4]; }    // 場所
    if ( record[5] ){ options.guests = record[5]; }      // ゲスト
    if ( record[6] ){ options.sendInvites = true; }      // 招待メール

    // イベント作成
    try {
      const event = calendar.createEvent(
        record[0],  // タイトル
        record[1],  // 開始日時
        record[2],  // 終了日時
        options
      );
      results.push([`成功:Event ID=${event.getId()}`]);
    } catch(e) {
      results.push([`失敗:${e}`]);
    }
  }

  // 処理結果貼り付け
  sheet.getRange(2,8,results.length,1).setValues(results);

}

*コード冒頭の”xxxxxxxxxxxxxxxxxxxxxxxxxx@group.calendar.google.com”部分には、イベントを登録したいカレンダーのIDを入力してください。(Googleカレンダーの「設定と共有」画面の「カレンダーの統合」部分にあるカレンダーIDです)

その後、スクリプトエディタの▷実行で実行します。

(もしくは、スプレッドシート上に図形描画でボタンを配置して、スクリプトを割り当てcreateEventsFromSheetを割り当ててください)

コメント

  1. kasumi より:

    このコードで更に登録済みの予定が再登録されない方法はありますか??
    スプレッドシートに記載したまま次の予定を追加したいのですが、一度登録されたものまで再度登録されてしまいます、、、(涙)

  2. kuma より:

    不正なデータというのをどの構文で判断しているのですか?例えばタイトルが入っていない場合は登録されないというようにするにはどうしたらよいのでしょうか?

タイトルとURLをコピーしました