
イメージとしてはこのような感じでしょうか?
この結果になるコードは下記になります。
gs
1const CALENDAR_ID = 'xxx' //カレンダーID
2
3function getCalendarEvents() {
4
5 const calendar = CalendarApp.getCalendarById(CALENDAR_ID);
6 const startTime = new Date('2022/05/09 00:00:00');
7 const endTime = new Date('2022/05/13 23:59:59');
8
9 const events = calendar.getEvents(startTime, endTime);
10
11 const values = [];
12 for(const event of events){
13 // 会議開始時間の時と分
14 let startTimeHours = event.getStartTime().getHours()
15 let startTimeMinutes = event.getStartTime().getMinutes()
16
17 // 会議終了時間の時と分
18 let endTimeHours = event.getEndTime().getHours()
19 let endTimeMinutes = event.getEndTime().getMinutes()
20
21 // 開始時間が9時00分より大きい場合、true
22 let startTimeFlg = (startTimeHours >= 9 && startTimeMinutes >= 0) ? true : false
23 // 終了時間が17時00分ちょうどの場合、true
24 let endTimeFlg = (endTimeHours == 17 && endTimeMinutes == 0) ? true : false
25 if (!endTimeFlg) {
26 // 終了時間が16時59分以内の場合、true
27 endTimeFlg = (endTimeHours <= 16 && endTimeMinutes <= 59) ? true : false
28 }
29
30 // 9時から17時のスケジュールのみ取得
31 if (startTimeFlg && endTimeFlg) {
32
33 const record = [
34 event.getTitle(),
35 event.getStartTime(),
36 event.getEndTime()
37 ];
38 values.push(record);
39 }
40 }
41
42 SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values).setNumberFormat('yyyy/MM/dd H:mm:ss');
43
44 // イベント時間を算出する数式設定
45 let formulaRow = values.length
46 let formulaCol = 1
47 let formulaValue = []
48
49 for (let i = formulaCol; i <= formulaRow; i++) {
50 formulaValue.push([`=C${i+1}-B${i+1}`])
51 }
52
53 // D列に数式を記載
54 SpreadsheetApp.getActiveSheet().getRange(2, 4, formulaValue.length, formulaValue[0].length).setFormulas(formulaValue).setNumberFormat('H:mm:ss')
55
56 // 集計時間と空き時間の算出と数式設定
57 // シートの最終行を取得
58 let lastRow = SpreadsheetApp.getActiveSheet().getLastRow()
59 let aggreAndFreeTimeValues = []
60 aggreAndFreeTimeValues.push(['="時間集計"', `=SUM(D2:D${lastRow})`])
61 aggreAndFreeTimeValues.push(['="空き時間"', `=("40:00:00"-D${lastRow+1})`])
62
63 // 最終行+1のC、D列に数式を記載
64 SpreadsheetApp.getActiveSheet().getRange(lastRow + 1, 3, aggreAndFreeTimeValues.length, aggreAndFreeTimeValues[0].length).setFormulas(aggreAndFreeTimeValues).setNumberFormat('[h]:mm:ss')
65}
ご確認の方、よろしくお願いします。