You need to enable JavaScript to run this app. Google Form提交后发日历邀请脚本报push undefined错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Google Form提交后发日历邀请脚本报push undefined错误求助

问题根因

报错TypeError: Cannot read property 'push' of undefined的核心原因是:当目标日历事件预先没有添加任何参会者时,Calendar API返回的事件对象不存在attendees属性,该字段值为undefined,无法直接调用数组的push方法。部分用户运行正常是因为其测试的日历事件本身已存在至少1名参会者,attendees数组已完成初始化,所以可以正常操作。

修复后的完整代码

仅需修改addGuestAndSendEmail函数中attendees变量的初始化逻辑,给不存在的attendees字段默认赋值为空数组即可:

// Add a trigger - add guest on form submit
function Initialize() {

  var triggers = ScriptApp.getProjectTriggers();

  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  ScriptApp.newTrigger("addGuest")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();

}


function addGuest(e) {
  // 日历ID可在日历的“设置和共享”>“整合日历”中获取,通常为你的谷歌邮箱地址
  var calendarId = "EMAIL ADDRESS GOES HERE";
  
  // 确认此处字段名和你Google Form里的邮箱字段名称完全一致,大小写敏感
  var email = e.namedValues['Email'].toString();
  
  // 仅支持单场活动,或重复活动的首个实例
  var eventId = "EID GOES HERE";

  addGuestAndSendEmail(calendarId, eventId, email);
}

// 需提前开启Google Calendar高级API服务
// 若为重复活动,仅对首个实例生效
function addGuestAndSendEmail(calendarId, eventId, newGuest) {
  var event = Calendar.Events.get(calendarId, eventId);
  // 关键修改:attendees不存在时默认赋值为空数组
  var attendees = event.attendees || [];
  attendees.push({email: newGuest});

  var resource = { attendees: attendees };
  var args = { sendUpdates: "all" };

  Calendar.Events.patch(resource, calendarId, eventId, args);
}
额外注意事项
  • 首次运行Initialize函数创建触发器时,必须完成所有权限授权,确保脚本持有表格读取、日历编辑的对应权限
  • 若需要为重复活动的所有场次添加参会者,需额外查询活动的所有实例后逐场调用添加逻辑
  • 可按需添加try-catch代码块捕获运行异常,方便后续定位其他偶发问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:24:04