导出带颜色的Gcal:如何将Google Calendar颜色同步至Google Sheets
从Google Calendar导出事项颜色并同步到Google Sheets的实现方法
现在可以通过Google Apps Script实现这个需求,利用Calendar API获取事项的颜色信息,再写入Google Sheets并同步格式,具体步骤如下:
1. 启用Calendar API并配置脚本环境
- 打开目标Google Sheets,点击菜单栏「扩展程序」→「Apps Script」进入脚本编辑器。
- 在脚本编辑器左侧,点击「服务」→「添加服务」,选择「Google Calendar API」并添加。
2. 编写核心脚本
替换代码中的YOUR_CALENDAR_ID(可在Google Calendar设置中找到)和SHEET_NAME(你的工作表名称):
function syncCalendarColorsToSheets() { const calendarId = 'YOUR_CALENDAR_ID'; const sheetName = 'SHEET_NAME'; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); // 清空现有数据(保留表头) sheet.getDataRange().offset(1, 0).clearContent().clearFormat(); // 获取日历事项及颜色配置 const calendar = Calendar.Calendars.get(calendarId); const colorMap = calendar.eventColors; // 日历的颜色映射表 const events = Calendar.Events.list(calendarId, { timeMin: new Date(new Date().getFullYear(), 0, 1).toISOString(), // 同步年初至今的事项,可自行调整时间范围 singleEvents: true, orderBy: 'startTime' }); // 准备写入数据 const rows = []; rows.push(['事项标题', '开始时间', '结束时间', '颜色ID', '颜色值']); // 表头 if (events.items && events.items.length > 0) { events.items.forEach(event => { const start = event.start.dateTime || event.start.date; const end = event.end.dateTime || event.end.date; const colorId = event.colorId || '1'; // 默认颜色ID为1 const colorHex = colorMap[colorId].background; rows.push([ event.summary || '无标题', start, end, colorId, colorHex ]); }); } // 写入数据到Sheets sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows); // 给行设置背景颜色 for (let i = 2; i <= rows.length; i++) { const colorHex = rows[i-1][4]; sheet.getRange(i, 1, 1, 5).setBackground(colorHex); } }
3. 测试并设置自动同步
- 点击脚本编辑器的运行按钮,首次运行会触发权限授权,按提示完成验证即可。
- 验证成功后,脚本会自动将日历事项及对应颜色同步到指定工作表。
- 若需要定期自动同步,点击左侧「触发器」→「添加触发器」,设置触发频率(比如每天定时运行)。
关键说明
- 每个Google Calendar都有专属的
eventColors映射表,colorId会对应返回该颜色的十六进制背景色值。 - 可修改脚本中的
timeMin参数调整同步的时间范围,例如改为new Date(new Date().getFullYear() - 1, 0, 1).toISOString()同步去年至今的事项。
内容的提问来源于stack exchange,提问作者RoosterMagic22
相关产品推荐
相关产品推荐

