CalendarApp创建事件错误添加至非目标日历问题排查
问题原因与修复方案:事件总是添加到默认日历而非指定日历
嘿,一眼就瞅出问题所在啦!你虽然在代码里正确通过CalendarApp.getCalendarById(calendarId)拿到了目标日历的对象calendar,但最后创建事件的时候却误用了默认日历的方法——你调用的是CalendarApp.getDefaultCalendar().createEvent(),这就直接跳过了指定的calendar对象,每次都往你的默认日历(也就是第一个日历)里加事件,难怪结果不符合预期。
修复步骤
- 替换创建事件的调用对象:把创建事件的代码从默认日历改成你已经获取到的
calendar对象。 - (可选但推荐)优化性能:你现在每行多次调用
getRange会拖慢脚本速度,建议一次性获取整行数据,再从数组里提取需要的值。
修改后的完整代码
function createCalendarEvent(calendarId, row) { var spreadsheet = SpreadsheetApp.getActiveSheet(); // 一次性获取整行数据,提升性能 var rowData = spreadsheet.getRange(row, 1, 1, 15).getValues()[0]; var lastName = rowData[3]; // 第4列(数组索引从0开始) var firstName = rowData[2]; // 第3列 var title = lastName + ", " + firstName; var eventDate = rowData[11]; // 第12列 var startTime = new Date(rowData[13]); // 第14列 var endTime = new Date(rowData[14]); // 第15列 var startDate = new Date(startTime.getTime()); var endDate = new Date(endTime.getTime()); startDate.setYear(eventDate.getYear()); startDate.setMonth(eventDate.getMonth()); startDate.setDate(eventDate.getDate()); endDate.setYear(eventDate.getYear()); endDate.setMonth(eventDate.getMonth()); endDate.setDate(eventDate.getDate()); var calendar = CalendarApp.getCalendarById(calendarId); // 确认日历对象是否正确获取(可保留日志调试) Logger.log(calendar.getName()); Logger.log(calendar.isOwnedByMe()); Logger.log(calendar.getId()); // 关键修改:用指定日历创建事件,而非默认日历 var event = calendar.createEvent(title, startDate, endDate); Logger.log('Event ID: ' + event.getId()); }
关键说明
- 核心修改就是把
CalendarApp.getDefaultCalendar().createEvent(...)换成calendar.createEvent(...),这样事件就会被添加到你传入calendarId对应的日历里了。 - 之前你打印的
calendar相关日志,只要能输出正确的日历名称和ID,说明日历对象获取正常,修改后就能按预期工作。
内容的提问来源于stack exchange,提问作者Sina
相关产品推荐
相关产品推荐

