経緯
個人ごとの勤怠時間をGoogleカレンダーに登録しているが、かなりめんどくさい。
繰り返しができればいいが、シフト制なので曜日や時間に規則性がないため
ポチポチ入力するのがかなりキツイです、、、
やること
・Googleスプレッドシートに勤怠時間を入力させる
・GoogleAppsScript(gas)で、指定された日をカレンダーに入力
準備
スプレッドシート
カレンダーIDの確認
PC版Googleカレンダーから
歯車アイコン→「設定」→「マイカレンダーの設定」から対象のカレンダーをクリック
コード
//シート名
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);
}
}