INSIGHT

情報・インサイト

スプレッドシートからカレンダーに連携してスケジュールを一括登録する【Google Apps Script(GAS)】

2019.08.20

googleスプレッドシート


※こちらに記載している方法は、記事作成時(2019年8月時点)での連携方法となっております。

2024年8月現在では様々なバージョンアップや改定等の影響により、動作しない場合もございますので、ご了承ください※

googleスプレッドシートから、googleカレンダーにまとめて予定を連携する方法について解説します。
Google Apps Script(GAS)を利用していますが、スクリプトが良くわからない方でも、
コピペでも利用ができるようになっていますので、お試しください。

こんな方におススメ

  • スケジュールをエクセルやスプレッドシートで管理している
  • googleカレンダーの予定を一括で登録したい
  • google apps scriptを勉強中
  • 予定の管理方法を検討中    など

Google Apps Script(GAS)とは

googleが提供しているスプレッドシートやドライブなどのアプリやサービスで実行することが出来る
プログラミング言語です。
googleのアカウントがあれば無料で利用することができ、googleの関連サービスを連携させたり、
外部APIと連携することができます。

できること

スプレッドシートで管理しているスケジュールがあります。
この一見、見づらい一覧をボタン1つでgoogleカレンダーに連携します。

日付 曜日 開始 終了 タイトル 場所 説明
2019/07/29 10:00 11:30 ジム通い
2019/07/29 12:00 13:00 ランチ
2019/07/29 14:00 15:00 打ち合わせ 大阪市中央区久太郎町2丁目5-28 久太郎町恒和ビル7F
2019/07/29 17:00 21:00 送別会
2019/07/29 21:30 23:00 スーパー銭湯
2019/07/30 10:00 18:00 セミナー
2019/07/30 19:00 22:00 歓迎会
2019/07/31 10:30 11:00 打ち合わせ(会議室A)
2019/07/31 13:00 14:00 打ち合わせ(会議室B)
2019/07/31 14:00 16:00 打ち合わせ(会議室A) 新規プロジェクトについての打ち合わせ
2019/07/31 17:00 18:00 打ち合わせ(会議室A)
2019/07/31 19:00 21:00 プロジェクト打ち上げ
2019/08/01 休み
2019/08/02 休み

実際に連携されるとこのように反映されます。

スプレッドシートとカレンダーの連携方法

では、ここからが本題です。

1. スプレッドシートの設定(サンプルシート有)

① スプレッドシートに予定表を作成します。
※すでにお使いの予定表があればカスタマイズしてみてください

予定一覧サンプル

【デモ】実際のスプレッドシートはこちら
ご自身のアカウントにコピー後、スクリプトを下記の手順で追加してください

ポイント

  • B5セルから表を作成(GASで指定)
  • カレンダー連携されたかどうかを「連携列」で判断
  • 水色のタイトルの項目をGASで読み込む

2. スクリプトの設定(ソースコード有)

① 「ツール」> 「スクリプトエディタ」からエディタを表示します。

スクリプトエディタの表示

スクリプトエディタ編集

② エディタが表示されたら、ソースをコピペします。
※アカウント部分を書き換えます

サンプルソース

/**
 * スプレッドシート表示の際に呼出し
 */
function onOpen() {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  //スプレッドシートのメニューにカスタムメニュー「カレンダー連携 > 実行」を作成
  var subMenus = [];
  subMenus.push({
    name: "実行",
    functionName: "createSchedule"  //実行で呼び出す関数を指定
  });
  ss.addMenu("カレンダー連携", subMenus);
}

/**
 * 予定を作成する
 */
function createSchedule() {

  // 連携するアカウント
  const gAccount = "★★@gmail.com";  // ★★ここに連携するカレンダーのアドレスを入れる
  
  // 読み取り範囲(表の始まり行と終わり列)
  const topRow = 6;
  const lastCol = 9;

  // 0始まりで列を指定しておく
  const statusCellNum = 1;
  const dayCellNum = 2;
  const startCellNum = 4;
  const endCellNum = 5;
  const titleCellNum = 6;
  const locationCellNum = 7;
  const descriptionCellNum = 8;

  // シートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 予定の最終行を取得
  var lastRow = sheet.getLastRow();
  
  //予定の一覧を取得
  var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues();

  // googleカレンダーの取得
  var calender = CalendarApp.getCalendarById(gAccount);

  //順に予定を作成(今回は正しい値が来ることを想定)
  for (i = 0; i <= lastRow - topRow; i++) {

    //「済」っぽいのか、空の場合は飛ばす
    var status = contents[i][statusCellNum];
    if (
      status == "済" ||
      status == "済み" ||
      status == "OK" ||
      contents[i][dayCellNum] == ""
    ) {
      continue;
    }

    // 値をセット 日時はフォーマットして保持
    var day = new Date(contents[i][dayCellNum]);
    var startTime = contents[i][startCellNum];
    var endTime = contents[i][endCellNum];
    var title = contents[i][titleCellNum];
    // 場所と詳細をセット
    var options = {location: contents[i][locationCellNum], description: contents[i][descriptionCellNum]};
    
    try {
      // 開始終了が無ければ終日で設定
      if (startTime == '' || endTime == '') {
        //予定を作成
        calender.createAllDayEvent(
          title,
          new Date(day),
          options
        );
        
      // 開始終了時間があれば範囲で設定
      } else {
        // 開始日時をフォーマット
        var startDate = new Date(day);
        startDate.setHours(startTime.getHours())
        startDate.setMinutes(startTime.getMinutes());
        // 終了日時をフォーマット
        var endDate = new Date(day);
        endDate.setHours(endTime.getHours())
        endDate.setMinutes(endTime.getMinutes());
        // 予定を作成
        calender.createEvent(
          title,
          startDate,
          endDate,
          options
        );
      }

      //無事に予定が作成されたら「済」にする
      sheet.getRange(topRow + i, 2).setValue("済");

    // エラーの場合(今回はログ出力のみ)
    } catch(e) {
      Logger.log(e);
    }
    
  }
  // ブラウザへ完了通知
  Browser.msgBox("完了");
}

ポイント

  • ★★部分に必ず連携するアカウントを設定
  • スクリプトの名前を付けて保存
  • スクリプト名は何でもOK(サンプルではmigrationSchedule)

 

~ 連携準備はこれで完了です。次はカレンダーに連携します ~

3.カレンダー連携

① スプレッドシートに追加された「カレンダー連携 > 実行」を選択します。
※メニューが無い場合は画面を更新してください

カレンダー連携選択

② 表示される認証画面はサクサク進めましょう。

承認確認ダイアログ

アカウント選択

安全でないページの選択

接続許可

カレンダー連携完了

ポイント

  • セキュリティの警告は自分が作成したスクリプトなので気にしない
  • 完了ダイアログまで来ると連携済み
  • 「連携列」が空の場合だけカレンダーに連携される

4.カレンダー確認

① 連携したカレンダーを表示すると予定が設定されています。

連携済みカレンダー

時間がずれる場合

時間が正しく設定できない場合はタイムゾーンの設定を確認してください

  • スプレッドシートの設定①「ファイル」>「googleスプレッドシートの設定」②「タイムゾーン」を「(GMT+09:00)Tokyo」に変更
  • googleカレンダーの設定右上の歯車から「設定」>「言語と地域」「タイムゾーン」を「(GMT+09:00)日本標準時」に変更

まとめ

うまく連携できたでしょうか?

今回のスクリプトでは、事前に準備されたテンプレートに沿って実行されますが、
ソースをカスタマイズすることで、自由に変形することもできます。

Google Apps Scriptを使うと、無駄な作業を自動化したり、外部サービスと連携するなどで、業務効率の向上を図ることができます。
無料で簡単に始められるサービスですので、みなさんも是非お試しください。

ウィズテクノロジーで一緒に働きませんか?
分野を限定せず幅広い事業を展開。新しい技術の導入にも積極的に取り組んでおり、チャレンジや成長する機会が沢山。
あなたの経験・知識を活かしながら一緒にIT業界を盛り上げて行きましょう!
採用情報詳細はコチラ

WORKS

導入事例

ウィズテクノロジーは大阪を拠点に、システム開発の分野で20年の実績を持つパートナー企業です。
業務効率化やDX支援など、さまざまな課題にワンストップで対応。
経験豊富なエンジニアが、企業の成長を技術面からしっかりサポートします。

導入事例一覧を見る
導入事例一覧を見る

RECRUIT

採用情報

未来に、価値ある選択を。

All WhizzTechnologyは、期待を超える価値をともにつくり、より良い未来へ導く仲間を募集しています。