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

Google Sheet转Calendar事件脚本无法发送参会邀请求助

问题排查结果

原代码无法实现邀请发送、事件同步到参会人日历的原因如下:

  • 核心逻辑缺失:未读取表格中参会人邮箱字段,也未调用日历服务的添加参会人、发送邀请接口
  • 存在未定义变量:summary/type/dur/recurrence 四个变量未声明赋值,脚本运行时会直接抛出引用错误,无法正常创建事件
  • 行号匹配错误:表格行号从1开始计数,数据数组索引从0开始计数,原代码写入事件ID时未做偏移,会把ID写入错误的行
  • 日期解析不可靠:使用getDisplayValues()获取格式化后的文本拼接日期,容易出现时区不匹配、格式解析失败的问题
  • 未开启邀请发送开关:创建事件时未配置sendInvites参数,即使添加参会人也不会自动发送邀请通知
修复后完整代码
function main() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  // 改用getValues获取原生值(日期、数字类型直接读取,避免文本解析错误)
  var values = ss.getDataRange().getValues()
  var lc = ss.getLastColumn()
  for (var i = 1; i < values.length; i++) {
    var evId = processLine(values[i], lc)
    // 修正行号偏移:数组索引从0开始,表格行号从1开始,i为数组索引时对应表格i+1行
    ss.getRange(i+1, lc).setValue(evId)
  }
}

function processLine(x, lc) {
  // ========== 列索引配置,请根据实际表格结构调整,从0开始计数 ==========
  const COL_JOBTYPE = 5;        // 触发类型列
  const COL_SUMMARY = 0;        // 活动标题列
  const COL_TYPE = 1;           // 活动类型列
  const COL_DUR = 2;            // 活动时长列
  const COL_FREQ = 6;           // 重复频率列
  const COL_DATE = 7;           // 活动日期列
  const COL_START_TIME = 8;     // 开始时间列
  const COL_END_TIME = 9;       // 结束时间列
  const COL_LOCATION = 10;      // 活动地点列
  const COL_GUEST_EMAILS = 11;  // 参会人邮箱列,多个邮箱用英文逗号分隔
  // ===================================================================

  var jobType = x[COL_JOBTYPE]
  var evId = x[lc-1]

  // 已创建过事件、不符合触发条件的行直接跳过
  if (jobType != 1 || evId != '') {
    return evId
  }

  // 读取各字段值
  var summary = x[COL_SUMMARY]
  var type = x[COL_TYPE]
  var dur = x[COL_DUR]
  var freq = x[COL_FREQ]
  var location = x[COL_LOCATION]
  var guestEmails = x[COL_GUEST_EMAILS]
  var description = `${type} - ${dur} - ${freq}`

  // 拼接开始、结束时间,直接使用原生日期对象避免解析错误
  var eStart = new Date(x[COL_DATE])
  eStart.setHours(x[COL_START_TIME].getHours(), x[COL_START_TIME].getMinutes())
  var eEnd = new Date(x[COL_DATE])
  eEnd.setHours(x[COL_END_TIME].getHours(), x[COL_END_TIME].getMinutes())

  // 事件配置:添加地点、参会人,开启自动发送邀请
  var opts = {
    location: location,
    guests: guestEmails,
    sendInvites: true
  }

  var ev
  // 单次事件
  if (freq == 'Once Off') {
    ev = CalendarApp.createEvent(summary, eStart, eEnd, opts)
  } else {
    // 重复事件规则示例:每周重复,可根据实际需求调整重复规则
    var recurrence = CalendarApp.newRecurrence().addWeeklyRule().until(eEnd)
    ev = CalendarApp.createEventSeries(summary, eStart, eEnd, recurrence, opts)
  }

  // 补充事件属性
  ev.setColor(CalendarApp.EventColor.YELLOW)
  ev.setDescription(description)
  console.log(ev.getId())
  return ev.getId()
}
使用说明
  • 首次运行脚本时,需要按照弹窗提示完成表格、日历权限授权,否则脚本无法正常执行
  • 请根据实际表格的列顺序,调整代码开头配置区的列索引值,索引从0开始计数(即A列对应0,B列对应1,以此类推)
  • 参会人邮箱列支持填写多个邮箱,用英文逗号分隔即可,邮箱需为有效Google账号才能正常接收邀请、同步事件到日历
  • 重复事件的规则可根据实际需求修改,示例为每周重复,可按需改为每日、每月、指定工作日重复等规则

内容的提问来源于stack exchange,提问作者pres10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:21:49