如何在不发送邮件的情况下为日历活动添加参会者
修改后的完整脚本
// 为onCalendar列空的行创建日历活动,并静默添加参会者(不发邀请) function createCalendarEvent() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const workingSheet = ss.getSheetByName('Working'); const tripData = workingSheet.getDataRange().getValues(); // 定义各日历ID const busDriverCalendar = CalendarApp.getCalendarById('vlkexampletest@gmail.com'); const coachCalendar = CalendarApp.getCalendarById('2c95526055802636cb6c0a10534c9b4117e506ebda17c031d44ffafbabfba455@group.calendar.google.com'); const blueCalendar = CalendarApp.getCalendarById('c_b48cc9afd2e6d4ca24f29199dd1a0a9d056725bc84db9b35542ef00b13ba2851@group.calendar.google.com'); // 跳过表头,从第2行开始遍历(索引1) for(let i = 1; i < tripData.length; i++) { // 若onCalendar列已有内容,跳过该行 if(tripData[i][30]) continue; // 缺少必要数据(标题、开始/结束时间)则跳过 if(!(tripData[i][28] && tripData[i][34] && tripData[i][35])) continue; let newEvent; // 根据不同类型创建对应日历的事件 switch(tripData[i][15]) { case "I need a driver.": newEvent = busDriverCalendar.createEvent( tripData[i][28], tripData[i][34], tripData[i][35], { description: tripData[i][29], location: tripData[i][32]} ); break; case "I have already arranged a coach to drive.": newEvent = coachCalendar.createEvent( tripData[i][28], tripData[i][34], tripData[i][35], { description: tripData[i][29], location: tripData[i][32]} ); break; case "Blue bus (505)": newEvent = blueCalendar.createEvent( tripData[i][28], tripData[i][34], tripData[i][35], { description: tripData[i][29], location: tripData[i][32]} ); break; default: continue; // 不匹配的类型直接跳过 } // 记录事件ID到数组 tripData[i][30] = newEvent.getId(); // 获取B列的参会者邮箱,静默添加到事件(不发邀请) const attendeeEmail = tripData[i][1]; // B列对应索引1 if(attendeeEmail) { // 进阶静默方案:使用Calendar Advanced Service彻底关闭通知 // 需先在脚本编辑器「服务」中启用Google Calendar API Calendar.Events.patch( { attendees: [{ email: attendeeEmail, responseStatus: "accepted" }] }, newEvent.getOriginalCalendarId(), newEvent.getId(), { sendUpdates: "none" } ); } } // 批量写入onCalendar列数据,提升效率(原脚本每次创建都写入,现在只写一次) const oncalendarColumnData = tripData.map(row => [row[30]]); workingSheet.getRange(1, 31, oncalendarColumnData.length, 1).setValues(oncalendarColumnData); }
关键改动说明
- 彻底静默添加参会者:通过Google Calendar Advanced Service的
sendUpdates: "none"参数,确保添加参会者时不发送任何邀请邮件,同时直接将参会者状态设为已接受。 - 优化运行效率:把原脚本中重复的表格写入逻辑移到循环结束后批量执行,减少API调用次数,避免不必要的性能损耗。
- 代码结构优化:用
switch替代多个if判断,逻辑更清晰;修正循环起始索引,跳过表头行避免无效操作。 - 容错处理:跳过空邮箱的情况,避免无意义的API调用。
内容的提问来源于stack exchange,提问作者vlkirkpatrick
相关产品推荐
相关产品推荐

