今日は「シフト表を作成するためにGoogleカレンダーをスプレッドシートにダウンロードして、修正後のカレンダーをアップロード出来たらいいのにな~。」という方のために記事を書きます。

1.スプレッドシートの見出しを作る。

 まずGoogleのスプレッドシートを開く。そして以下の見出しを入力する。

タイトル開始日時終了日時
またシート名を「Googleカレンダー」と入力する。※ファイル名ではないので注意

2.Googleカレンダーをダウンロードする。

 次にスプレッドシートのツール⇒スクリプトエディタで以下のコードを貼り付ける。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

//Googleカレンダーのダウンロード

function getCalendar() {

  //スプレッドシートの'Googleカレンダー'というシート名を選択する。

  var sheet = SpreadsheetApp.getActive().getSheetByName('Googleカレンダー');

  //このシートのデータのある最終行を取得※2行目からデータ入力するため。

  var no = sheet.getDataRange().getLastRow(); 

  //ダウンロードする'GoogleカレンダーID'を指定する。

  var calendar = CalendarApp.getCalendarById(''); 

  //ダウンロードするGoogleカレンダーの月を指定する。

  var date = '2020/01/01 00:00:00'; 

  //指定した月の開始日'2020/01/01 00:00:00'

  var startDate = new Date(date);

  //指定した月の終了日'2020/02/01 00:00:00'

  var endDate = new Date(date);

  //月の終了日'2020/02/01 00:00:00'の1か月後

  endDate.setMonth(endDate.getMonth() + 1);

  //指定したGoogleカレンダーから開始日~終了日を取得

  var events = calendar.getEvents(startDate, endDate);

  //予定があるだけ、繰り返しスプレッドシートに記録する。

  for (var i = 0; i < events.length; i++){

    //シートにデータを追加する。

    sheet.appendRow(

      [

        //ナンバーをダウンロードする。

        no,

        //タイトルをダウンロードする。

        events[i].getTitle(), 

        //開始時刻をダウンロードする。

        events[i].getStartTime(),

        //終了時刻をダウンロードする。

        events[i].getEndTime(), 

      ]

    );

   //ナンバーに1をプラスする。

    no++;

  }

}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
シフト希望を入力したGoogleカレンダーを開く。対象のカレンダーの「設定と共有」を開き、カレンダー統合のところにあるカレンダーIDをコピーする。コードの中のgetCalendarById('')の中にカレンダーIDに貼り付ける。そしてコードのvar date = '2020/01/01 00:00:00';の月のところをダウンロードしたい月に修正する。▶の実行ボタンを押す。

3.スプレッドシートを確定したシフト表を反映させる。

 そしてダウンロードされたデータを確定させるシフト予定を反映させる。タイトルに【確定】と付け、時間を調節する。

4.スプレッドシートをカレンダーにアップロードする。

 最後に確定したスプレッドシートをカレンダーアップロードするため、再びツール⇒スクリプトエディタで以下のコードを貼り付ける。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
//Googleカレンダーヘアップロード
function createEventFromSheet() {
    //'Googleカレンダー'のシートを選択する。
    var sheet = SpreadsheetApp.getActive().getSheetByName('Googleカレンダー');
    //2行目から1行ごとに行データの取得を繰り返す。
    for(var i = 2; i <= sheet.getLastRow(); i++) {
       //i行、2列目の値を取得、文字列、桁数を取得する。
        var title = sheet.getRange(i, 2).getDisplayValue().toString();
        //i行、3列目の値を取得、桁数を取得する。
        var start = sheet.getRange(i, 3).getValue().toString();
        //i行、4列目の値を取得、桁数を取得する。
       var end = sheet.getRange(i, 4).getValue().toString();
        //タイトルがなくなった場合、
        if(title.length <= 0) {
           //繰り返しを止める。
            break;
        }
 
        //開始日時を取得する。
        var startTime = new Date(start);
       //終了日時を取得する。
        var endTime = new Date(end);
        //'GoogleカレンダーID'を指定する。
        var cal = CalendarApp.getCalendarById('');
        //カレンダーにイベントを追加する。
        cal.createEvent(title, startTime, endTime);
    }
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
先程と同様、確定シフト用のGoogleカレンダーのカレンダーIDをコードの中のgetCalendarById('')の中に貼り付け、▶の実行ボタンを押してアップロードする。このように1つのカレンダーをダウンロードして、編集後アップロードすることができる。

※なおこのコードを完成させる目安時間はパソコンに慣れていればプログラムをやったことがなくても1時間程度で作ることができます。