Google Calendar API:如何检查日历是否存在指定事件避免重复添加
修复方案
方案1:新增同步标记列(推荐)
这种方案效率最高,不需要重复请求日历接口,也能彻底避免重复创建问题,操作步骤如下:
- 在你的Google Sheet中新增D列,D4单元格填入
同步状态作为表头,后续同步成功的行都会在对应D列标记为「已同步」,下次执行时直接跳过已标记的行 - 替换为以下代码:
function addItemsToCalendar() { var spreadsheet = SpreadsheetApp.getActiveSheet(); var calendarId = spreadsheet.getRange("B2").getValue(); var eventCal = CalendarApp.getCalendarById(calendarId); // 读取范围扩展到D列,获取同步状态 var games = spreadsheet.getRange("A5:D8").getValues(); for (x = 0; x < games.length; x++) { var gameDate = games[x][0]; var awayTeam = games[x][1]; var homeTeam = games[x][2]; var syncStatus = games[x][3]; // 已同步的行直接跳过 if (syncStatus === "已同步") continue; var eventTitle = `${homeTeam} vs. ${awayTeam}`; eventCal.createAllDayEvent(eventTitle, gameDate); // 同步成功后写入标记,行号计算规则:数据从第5行开始,所以索引x+5 spreadsheet.getRange(x + 5, 4).setValue("已同步"); } } function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu("同步到日历") .addItem("同步赛事", "addItemsToCalendar") .addToUi(); }
方案2:无需修改表格,同步前校验日历是否存在重复事件
如果你不想改动现有表格结构,可以在创建事件前先查询对应日期的日历事件,核对标题和日期完全一致时就跳过创建:
function addItemsToCalendar() { var spreadsheet = SpreadsheetApp.getActiveSheet(); var calendarId = spreadsheet.getRange("B2").getValue(); var eventCal = CalendarApp.getCalendarById(calendarId); var games = spreadsheet.getRange("A5:C8").getValues(); for (x = 0; x < games.length; x++) { var gameDate = games[x][0]; var awayTeam = games[x][1]; var homeTeam = games[x][2]; var eventTitle = `${homeTeam} vs. ${awayTeam}`; // 查询当日所有事件,判断是否有重名的全天事件 var dayEvents = eventCal.getEventsForDay(gameDate); var hasDuplicate = dayEvents.some(event => { return event.isAllDayEvent() && event.getTitle() === eventTitle; }); // 无重复才创建新事件 if (!hasDuplicate) { eventCal.createAllDayEvent(eventTitle, gameDate); } } } function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu("同步到日历") .addItem("同步赛事", "addItemsToCalendar") .addToUi(); }
两种方案对比
- 方案1:适合数据量较大的场景,不会因为后续事件标题修改产生误判,稳定性更高
- 方案2:无需改动表格,但每次同步都要拉取日历数据,数据量较大时运行速度较慢,若后续表格中赛事名称修改会被判定为新事件重新创建
内容的提问来源于stack exchange,提问作者user16770205
相关产品推荐
相关产品推荐

