LoginSignup
1
1

More than 3 years have passed since last update.

【GAS】スプレッドシートに書いたイベントをカレンダーに登録させる

Posted at

経緯

個人ごとの勤怠時間をGoogleカレンダーに登録しているが、かなりめんどくさい。
繰り返しができればいいが、シフト制なので曜日や時間に規則性がないため
ポチポチ入力するのがかなりキツイです、、、

やること

・Googleスプレッドシートに勤怠時間を入力させる
・GoogleAppsScript(gas)で、指定された日をカレンダーに入力

準備

スプレッドシート

こんなかんじのもの
スプレッドシート.JPG

カレンダーIDの確認

PC版Googleカレンダーから
歯車アイコン→「設定」→「マイカレンダーの設定」から対象のカレンダーをクリック

こんな感じのものです
calendarID.JPG

コード

//シート名
var sheetNameArray = ['ぼく','わたし','あなた'];
var DATE=new Date();
//今月
var NOW=new Date(DATE.getFullYear(), DATE.getMonth() + 1 ,0);
//来月
var NEXT=new Date(NOW.getFullYear(), NOW.getMonth() + 2 ,0);
//カレンダー
var CALENDAR = CalendarApp.getCalendarById('xxx@group.calendar.google.com');  
//「今月」の行
var NOWCOLUMN = 2;
//「来月」の行
var NEXTCOLUMN = 5;
//「日付」列の先頭
var DAYROWFIRST = 3;
var sheet = '';

//指定月のイベントをまとめて削除
function deleteEvents(dateColumn){
  var date = sheet.getRange(2, dateColumn).getValue() + '/01 00:00:00';
  var startDate = new Date(date);
  var endDate = new Date(date);
  endDate.setMonth(endDate.getMonth() + 1);
  var events = CALENDAR.getEvents(startDate, endDate, {search: sheet.getName()});

  /* イベントの数だけ繰り返し */
  for (var i = 0; i < events.length; i++){
    events[i].deleteEvent();
    Logger.log("[deleteEvent]" + events[i].getStartTime() + events[i].getTitle());
  }
}

//指定月のイベントをまとめて作成
function createEvents(dateColumn){
  var row = DAYROWFIRST;
  var dateSeed = sheet.getRange(2, dateColumn).getValue();

  /* 日付の数だけ繰り返し */
  while( sheet.getRange(row, dateColumn).getValue() ){
    if( !sheet.getRange(row, dateColumn + 1).getValue() ){
//      Logger.log('none');
      row++;
      continue;
    }
    var date = dateSeed + '/' + sheet.getRange(row, dateColumn).getValue();
    var startDate = new Date( date + ' ' + sheet.getRange(row, dateColumn + 1).getValue());
    var endDate = new Date( date + ' ' + sheet.getRange(row, dateColumn + 2).getValue());

    CALENDAR.createEvent(sheet.getName(), new Date(startDate), new Date(endDate));
    Logger.log("[createEvent]" + sheet.getName() + "," + new Date(startDate) + "," + new Date(endDate) + ")");
    row++;
  }
}

//イベントメイン処理
function setCalendar(){
  for (var i = 0; i < sheetNameArray.length; i++){
    sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetNameArray[i]);

    deleteEvents(NOWCOLUMN);
    deleteEvents(NEXTCOLUMN);
    createEvents(NOWCOLUMN);
    createEvents(NEXTCOLUMN);
  }
}

結果

こうなります
ぼく.JPG
わたし.JPG
あなた.JPG

1
1
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
1
1