function exportAndSummarizeCalendarsToMultipleSheets() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); const sheet1 = spreadsheet.getSheetByName('シート1') || spreadsheet.insertSheet('シート1'); const sheet2 = spreadsheet.getSheetByName('シート2') || spreadsheet.insertSheet('シート2'); // カレンダーIDを配列で指定 const calendarIds = [ 'primary', // メインカレンダー 'example1@gmail.com', // 他のカレンダーID 'example2@gmail.com' ]; // ユーザーに開始日と終了日を入力させる const startDateInput = Browser.inputBox('開始日を入力してください(例: 2024-12-01)'); const endDateInput = Browser.inputBox('終了日を入力してください(例: 2024-12-31)'); // 入力された日付をDateオブジェクトに変換 const startDate = new Date(startDateInput); const endDate = new Date(endDateInput); // 日付が正しく入力されたか確認 if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { Browser.msgBox('日付の形式が正しくありません。再度実行して正しい形式で入力してください。'); return; } // シート1とシート2をクリア sheet1.clear(); sheet2.clear(); // シート1のヘッダー行を作成 sheet1.appendRow(['カレンダー名', 'タイトル', '開始日時', '終了日時', '作業時間 (分)']); // 集計データを格納するオブジェクト const summary = {}; // 各カレンダーのイベントを取得して出力 calendarIds.forEach(calendarId => { const calendar = CalendarApp.getCalendarById(calendarId); if (!calendar) { Logger.log(`カレンダーが見つかりません: ${calendarId}`); return; } const events = calendar.getEvents(startDate, endDate); const calendarName = calendar.getName(); // 初期化 if (!summary[calendarName]) { summary[calendarName] = { count: 0, totalMinutes: 0 }; } events.forEach(event => { const title = event.getTitle(); const startTime = event.getStartTime(); const endTime = event.getEndTime(); // 作業時間を計算(ミリ秒から分に変換) const durationInMinutes = (endTime - startTime) / (1000 * 60); // 集計 summary[calendarName].count++; summary[calendarName].totalMinutes += durationInMinutes; // シート1にイベントを出力 sheet1.appendRow([calendarName, title, startTime, endTime, durationInMinutes]); }); }); // シート2のヘッダー行を作成 sheet2.appendRow(['カレンダー名', '件数', '総作業時間 (分)', '総作業時間 (時間)']); // ヘッダーのスタイル設定 const headerRange = sheet2.getRange(1, 1, 1, 4); headerRange.setBackground('black').setFontColor('white').setFontWeight('bold'); // 集計結果をシート2に出力 let rowIndex = 2; // データの開始行 for (const [calendarName, data] of Object.entries(summary)) { const totalHours = (data.totalMinutes / 60).toFixed(2); // 時間に変換(小数点2桁) sheet2.appendRow([calendarName, data.count, data.totalMinutes, totalHours]); } SpreadsheetApp.flush(); Logger.log(`複数カレンダーのイベントを「シート1」に出力し、集計結果を「シート2」に出力しました。`); }