Google Sheets同步Calendar脚本问题:单日多事件被覆盖求修复
修复Google Sheets到Google Calendar同步脚本的重复覆盖问题
原脚本的问题在于:当检测到目标日期已有事件时,会删除所有标题不匹配的事件并创建新事件,导致同一天的其他不同标题事件被误删,无法共存。以下是修复后的脚本,核心逻辑改为仅当日期内不存在相同标题的事件时才创建新事件,保留其他不同标题的事件:
function sheet2calendar() { // 设置表格和日历 var spreadsheet = SpreadsheetApp.getActive().getSheetByName('LIST OF ALL COMPANIES'); var calendarID = spreadsheet.getRange("R1").getValue(); var calendar = CalendarApp.getCalendarById(calendarID); var movies = spreadsheet.getRange("A2:o2004").getValues(); for (let x = 0; x < movies.length; x++) { var entry = movies[x]; var startTime = new Date(entry[8]); var eventLength = 24; // 小时 var endTime = new Date(startTime.getTime() + eventLength * 60 * 60 * 1000); var movie = entry[2] + ' communication with client'; var description1 = entry[3] + " " + entry[14]; if (movie === '') continue; // 获取当天所有事件 var conflicts = calendar.getEvents(startTime, endTime); let eventExists = false; // 检查是否已有相同标题的事件 for (let c = 0; c < conflicts.length; c++) { var conflict = conflicts[c]; if (conflict.getTitle() === movie) { eventExists = true; // 可选:如果需要更新已有事件的描述,取消下面注释 // conflict.setDescription(description1); break; } } // 只有不存在相同标题的事件时,才创建新事件 if (!eventExists) { createAllDayEvent(calendar, movie, startTime, endTime, { description: description1 }); } } } function createAllDayEvent(cal, title, start, end, { description }) { cal.createEvent(title, start, end, { description }); } function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Sync to Calendar') .addItem('Sync Now', 'sheet2calendar') .addToUi(); }
关键改动说明
- 移除了原脚本中删除不匹配标题事件的逻辑,避免误删同一天的其他事件
- 新增
eventExists变量,用于标记目标日期是否已存在相同标题的事件 - 仅当不存在重复标题事件时,才执行创建操作;如果需要更新已有事件的信息(比如描述),可以取消注释中的更新代码
- 循环变量使用
let替代var,避免作用域问题
内容的提问来源于stack exchange,提问作者Виктория Астратова
相关产品推荐
相关产品推荐

