You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不发送邮件的情况下为日历活动添加参会者

修改后的完整脚本
// 为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:47:21