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

如何用Google Apps Script判断指定Google日历是否设为公开?

我明白你的问题了——你用Calendar.CalendarList.list()只能拿到日历的基本信息,但找不到判断公开状态的字段对吧?这是因为CalendarList接口返回的是用户已添加到侧边栏的日历列表元数据,并不包含完整的权限配置信息。

要判断日历是否公开,你需要结合日历详情接口或者**访问控制列表(ACL)**来检查,下面给你两种可行的方案和修改后的代码:

方案1:通过日历详情的visibility字段判断

Calendar.Calendars.get(calendarId)会返回日历的完整详情,其中visibility字段直接标识了日历的可见性:

  • public:日历完全公开,任何人都能查看
  • private:仅授权用户可见
  • 其他值(如restricted):有限制的可见性

方案2:通过ACL检查公共访问权限

日历的公开本质是给所有未登录的匿名用户(scope.type = "default")分配了reader权限,所以遍历日历的ACL规则就能确认这一点,这种方法更精准,因为有些日历可能通过自定义ACL设置公开,而visibility字段不一定同步更新。

修改后的完整代码

function checkCalendarPublicStatus() {
  var pageToken;
  do {
    // 获取用户的日历列表
    const calendarList = Calendar.CalendarList.list({
      maxResults: 100,
      pageToken: pageToken
    });
    
    if (calendarList.items && calendarList.items.length > 0) {
      for (const calendar of calendarList.items) {
        // 方法1:通过visibility字段判断
        const calendarDetails = Calendar.Calendars.get(calendar.id);
        const isPublicByVisibility = calendarDetails.visibility === 'public';
        
        // 方法2:通过ACL规则判断
        let isPublicByAcl = false;
        const aclRules = Calendar.Acl.list(calendar.id);
        if (aclRules.items) {
          for (const rule of aclRules.items) {
            // 检查是否存在给所有匿名用户的可读权限
            if (rule.scope.type === 'default' && rule.role === 'reader') {
              isPublicByAcl = true;
              break;
            }
          }
        }
        
        // 打印结果
        Logger.log(`日历名称: ${calendar.summary} (ID: ${calendar.id})`);
        Logger.log(`通过可见性字段判断是否公开: ${isPublicByVisibility}`);
        Logger.log(`通过ACL权限判断是否公开: ${isPublicByAcl}`);
        Logger.log('------------------------');
      }
    } else {
      Logger.log('未找到任何日历。');
    }
    
    pageToken = calendarList.nextPageToken;
  } while (pageToken);
}

注意事项

  1. 确保你已经在Google Apps Script编辑器中启用了高级Calendar服务(之前用Calendar.CalendarList应该已经启用了,不过如果报错可以再检查一下:点击「资源」→「高级Google服务」,找到Calendar服务并开启)。
  2. 第一次运行脚本时需要授权,确保你授权了足够的权限来访问日历详情和ACL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:25:54