如何使用 google 应用程序脚本从用户的电子邮件中获取日历 ID?

How to get Calendar Id from user's email using google apps script?

我正在尝试为在 google 表单上提交休假请求的用户创建一个 Google 日历事件。当此表单响应记录在 google 表中时,我得到了用户电子邮件 ID 并想为他们创建一个日历事件。当我使用我的电子邮件 ID 时,脚本会创建事件,但当我尝试为其他用户执行相同操作时,它会返回 null。

示例代码如下:

CalendarApp.getCalendarById(email)
        .createAllDayEvent(
            'OOO - Out Of Office',
            startDate,
            endDate,
            {
              description: message,
              sendInvites: true,
            }); 

我收到此错误:无法读取 属性 null

的“createAllDayEvent”

我 googled 这个错误,someone 建议订阅用户的日历可以解决这个问题。我使用以下代码段来反驳:

var calendar = CalendarApp.getCalendarById(email);
  if(calendar == null){
    //user may not have access, auto-subscribe them.
    calendar = CalendarApp.subscribeToCalendar(email,{hidden:true,selected:false});
  }

但它显示了一个新的错误说明:日历或日历事件不存在、已被删除或用户无权访问它

知道我们如何让它发挥作用。谢谢。

您不能在 Form Response 上执行此操作(至少不可靠)。

要在其他用户的日历中创建活动,他们必须更改日历设置以供 public 使用,并且访问权限必须设置为 'Make changes to events'。有关此的更多信息,请参阅 this help page

如果这些设置不是由用户设置的,您就无法为它们创建事件。在这种情况下,您有两个选择:

  1. 创建一个 OAuth2 应用程序,用户对其进行身份验证以允许代表他们创建日历事件(尽管这仍然不能在表单提交时完成)
  2. 您的 日历上创建活动并使用他们的电子邮件地址向他们发送邀请。您可以授予他们对活动的编辑权限,以便他们可以像在他们的日历中一样控制它,但在这种情况下,他们必须接受活动邀请。