LoginSignup
9
6

More than 5 years have passed since last update.

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

Posted at

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

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

紹介記事

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

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のMonthm(月)に+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

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

image.png

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6