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
相关产品推荐
相关产品推荐

