GASを使って複数メンバーのGoogleカレンダーをスプレッドシートに取り込む

今回はタイトル通り、
GASを使って複数メンバーのGoogleカレンダーをスプレッドシートに取り込む方法を紹介します！
※昨日アップした記事の応用ですね

以下様々なGASの記事を紹介してます！
https://bzbot.work/

##紹介記事
今回紹介している記事は以下です！
https://bzbot.work/2019/02/21/gas-calendar-2/

```javascript:GAS
//対象の日付を範囲指定
var date = '2019/01/01'; 
//アクティブなシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet();
//「Calender_ID」のシートをアクティブにして、シート情報をcalenderIdに取得
var calenderId = sheet.setActiveSheet(sheet.getSheetByName("Calender_ID"));
//「Calender_Item」のシートをアクティブにして、シート情報をcalenderItemに取得
var calenderItem = sheet.setActiveSheet(sheet.getSheetByName("Calender_Item"));


function getId(){
  //現在の入力されてる値を初期化
  calenderItem.clear();
  //ヘッダ行に入る値を指定（誤って削除しても都度指定）
  calenderItem.getRange('A'+(1)).setValue('カレンダーID');
  calenderItem.getRange('B'+(1)).setValue('タイトル');
  calenderItem.getRange('C'+(1)).setValue('開始時刻');
  calenderItem.getRange('D'+(1)).setValue('終了時刻');
  calenderItem.getRange('E'+(1)).setValue('所要時間');
  calenderItem.getRange('F'+(1)).setValue('詳細');
  calenderItem.getRange('G'+(1)).setValue('住所');
  
  //CalenderIDが入っている最終行を取得（固定）
  var lastR1 = calenderId.getLastRow();
  Logger.log("【lastR】：" + lastR1);
  
  //セットされているIDのリストを順番に取得してgetCalに引数として渡す
  for (var i = 1; i < lastR1 ; i++){
    //予定表が入っている最終行を取得（可変）
    var lastR2 = calenderItem.getLastRow();
    Logger.log("【lastR】：" + lastR2);

    //カレンダーIDを指定して、カレンダーを取得
    var calId = calenderId.getRange('A'+(i+1)).getValue(); 
    Logger.log('【calId】' + calId);
    getCal(calId,lastR2);
  }
}

function getCal(id,lastR) {
  Logger.log('【id】' + id);
  Logger.log('【lastR】' + lastR);
  
  var calendar = CalendarApp.getCalendarById(id);

  //この時はまだfrom,end両方に変数dateで指定した日付が入っている
  var from= new Date(date);　
  var end = new Date(date);
  //月を指定するときは必ず大文字のMMを指定します（半角mmだとminutesを指してしまう）
  //endのMonthｍ（月）に+1をして翌月を指定
  end.setMonth(end.getMonth()+1);
  //getEventsで取得したいカレンダーの始まりと終わりを指定
  var events = calendar.getEvents(from, end);

  //eventsに入っている要素の数だけ実行
  for (var i = 0; i < events.length; i++) {
  Logger.log('events要素' + i + '目');
    var title = events[i].getTitle();
    var startTime = events[i].getStartTime();
    var endTime = events[i].getEndTime();
    var duration = (endTime - startTime) /(1000*60)/(60);
    var detail = events[i].getDescription();
    var location = events[i].getLocation();

    //取得した値をスプレッドシートに反映
    calenderItem.getRange('A'+(lastR+1)).setValue(id);
    calenderItem.getRange('B'+(lastR+1)).setValue(title);
    calenderItem.getRange('C'+(lastR+1)).setValue(startTime).setNumberFormat('yyyy/mm/dd hh:mm');
    calenderItem.getRange('D'+(lastR+1)).setValue(endTime).setNumberFormat('yyyy/mm/dd hh:mm');
    calenderItem.getRange('E'+(lastR+1)).setValue(duration);
    //calenderItem.getRange('E'+(lastR+1)).setValue(detail);
    calenderItem.getRange('G'+(lastR+1)).setValue(location);
    lastR = lastR + 1;
  }
}
```

まず、スプレッドシートにカレンダーIDの一覧を登録するシートを用意します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/363116/4eed6b96-4f8d-7c92-3e46-06eba47fa328.png)


カレンダーの予定が入るシートを作成します。
※もうすでに結果が入ってますが、実行するたびにGoogleカレンダーの指定したIDの情報が反映されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/363116/a9b3192b-ba54-a558-9515-b6262a49a07f.png)