Googleカレンダーにシフトを簡単に時間帯付きで登録する
Googleカレンダーにシフトを簡単に時間帯付きで登録する
背景
Googleカレンダーに簡単にシフト登録する方法に反響がありました。
上記エントリーでは終日予定で早番か遅番かを入力可能にしていますが、 早番は8:00~17:00、遅番は9:00~18:00のように時間帯指定で登録したいとコメントいただきましたので実現方法を書いてみました。
実現方法
上記エントリーの「カレンダーに登録するプログラムを書く」という章に次のようなコードがありますが、これを書き換えるだけで実現できます。
※これは終日予定を登録するコードです。
function executeInPosting() { //========================================================== // 設定箇所 //========================================================== var CALENDAR_ID = 'mada.chugakusei@gmail.com'; var SHIFT1 = '早番'; var SHIFT2 = '遅番'; var YEAR_COLUMN = 'B'; var MONTH_COLUMN = 'C'; var SHIFT1_COLUMN = 'D'; var SHIFT2_COLUMN = 'E'; //---------------------------------------------------------- var sheet = SpreadsheetApp.getActiveSheet(); bottom = sheet.getLastRow(); var year = sheet.getRange(YEAR_COLUMN + bottom).getValue(); var month = sheet.getRange(MONTH_COLUMN + bottom).getValue(); var shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue(); var shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue(); var shift1List = String(shift1).split(','); var shift2List = String(shift2).split(','); // シフト1を登録 for (var i = 0; i < shift1List.length; i++) { var dateStr = year + '/' + month + '/' + shift1List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT1, date); Logger.log('createEvent() is done.'); } // シフト2を登録 for (var i = 0; i < shift2List.length; i++) { var dateStr = year + '/' + month + '/' + shift2List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT2, date); Logger.log('createEvent() is done.'); } } // カレンダーに終日のイベントを作成 function createEvent(calendarId, title, date) { var calendar = CalendarApp.getCalendarById(calendarId); calendar.createAllDayEvent(title, date); }
これを次のように書き換えます。
function executeInPosting() { //========================================================== // 設定箇所 //========================================================== var CALENDAR_ID = 'mada.chugakusei@gmail.com'; var SHIFT1_NAME = '早番'; var SHIFT1_START_TIME = '8:00'; var SHIFT1_END_TIME = '17:00' var SHIFT2_NAME = '遅番'; var SHIFT2_START_TIME = '9:00'; var SHIFT2_END_TIME = '18:00'; var YEAR_COLUMN = 'B'; var MONTH_COLUMN = 'C'; var SHIFT1_COLUMN = 'D'; var SHIFT2_COLUMN = 'E'; //---------------------------------------------------------- var sheet = SpreadsheetApp.getActiveSheet(); bottom = sheet.getLastRow(); var year = sheet.getRange(YEAR_COLUMN + bottom).getValue(); var month = sheet.getRange(MONTH_COLUMN + bottom).getValue(); var shift1 = sheet.getRange(SHIFT1_COLUMN + bottom).getValue(); var shift2 = sheet.getRange(SHIFT2_COLUMN + bottom).getValue(); var shift1List = String(shift1).split(','); var shift2List = String(shift2).split(','); // シフト1を登録 for (var i = 0; i < shift1List.length; i++) { var dateStr = year + '/' + month + '/' + shift1List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT1_NAME, date, SHIFT1_START_TIME, SHIFT1_END_TIME); Logger.log('createEvent() is done.'); } // シフト2を登録 for (var i = 0; i < shift2List.length; i++) { var dateStr = year + '/' + month + '/' + shift2List[i]; Logger.log(dateStr); var date = new Date(dateStr); Logger.log(date); createEvent(CALENDAR_ID, SHIFT2_NAME, date, SHIFT2_START_TIME, SHIFT2_END_TIME); Logger.log('createEvent() is done.'); } } // カレンダーに時間帯のイベントを作成 function createEvent(calendarId, title, date, startTime, endTime) { var calendar = CalendarApp.getCalendarById(calendarId); //calendar.createAllDayEvent(title, date); var startDateTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), Number(startTime.split(':')[0]), Number(startTime.split(':')[1])); var endDateTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), Number(endTime.split(':')[0]), Number(endTime.split(':')[1] )); Logger.log('startDateTime'); Logger.log(startDateTime); Logger.log('endDateTime'); Logger.log(endDateTime); calendar.createEvent(title, startDateTime, endDateTime); }
注目は、
SHIFT1_START_TIME
SHIFT1_END_TIME
SHIFT2_START_TIME
SHIFT2_END_TIME
です。 次のように入力します。
変数名 | 意味 |
---|---|
SHIFT1_START_TIME | シフト1の開始時刻(早番) |
SHIFT1_END_TIME | シフト1の開始時刻(早番) |
SHIFT2_START_TIME | シフト2の開始時刻(遅番) |
SHIFT2_END_TIME | シフト2の開始時刻(遅番) |
結果
これでフォームを投稿してみると…
このように時間帯指定でシフトが登録できるようになります。
日をまたぐ予定を登録したい場合、
変数名 | 意味 |
---|---|
SHIFT1_START_TIME | 20:00 |
SHIFT1_END_TIME | 30:00 |
SHIFT2_START_TIME | 17:00 |
SHIFT2_END_TIME | 22:00 |
のように、深夜0時以降には24を足す形で表現することで実現できます。 (30時は翌朝の6時になります。)
以上です。