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

如何在Excel JS加载项中检测用户账户切换并获取当前账户?

Excel JS加载项账户切换相关问题解决方案

一、解决getAccessToken返回旧账户Token的问题

Office.js的SSO机制默认会缓存首次获取的AccessToken,导致切换账户后仍返回旧账户信息。解决方法是调用getAccessToken时强制刷新Token:

Office.auth.getAccessToken({ forceRefresh: true })
  .then(accessToken => {
    // 解码JWT并获取当前用户信息
    const decodedToken = parseJwt(accessToken); // parseJwt为自定义JWT解码函数
    console.log("当前用户:", decodedToken.name);
    // 执行UI更新或权限判断逻辑
  })
  .catch(error => {
    console.error("获取Token失败:", error);
  });

设置forceRefresh: true会跳过本地缓存,直接向身份认证服务请求当前活跃账户的新Token,确保拿到切换后的账户信息。

二、监听账户切换并更新UI

Office对象模型没有提供直接的账户切换事件,可通过以下两种方式实现UI更新:

  • 定期轮询检查:设置定时器,每隔一段时间(如5秒)调用带forceRefresh: true的getAccessToken,对比当前用户ID/邮箱与之前存储的信息,若不一致则更新UI:

    let currentUserId = "";
    
    setInterval(() => {
      Office.auth.getAccessToken({ forceRefresh: true })
        .then(token => {
          const decoded = parseJwt(token);
          if (decoded.oid !== currentUserId) {
            currentUserId = decoded.oid;
            // 调用UI更新函数,比如启用/禁用高级功能
            updateFeatureAccess(currentUserId);
          }
        })
        .catch(err => console.log(err));
    }, 5000);
    
  • 关联文档操作事件:监听Excel的文档激活或选择变化事件(如DocumentSelectionChanged),在事件触发时检查账户信息。用户切换账户后通常会进行文档操作,这类事件能覆盖大部分场景:

    Office.context.document.addHandlerAsync(
      Office.EventType.DocumentSelectionChanged,
      () => {
        checkCurrentUserAndUpdateUI();
      }
    );
    
    function checkCurrentUserAndUpdateUI() {
      Office.auth.getAccessToken({ forceRefresh: true })
        .then(token => {
          const decoded = parseJwt(token);
          // 执行UI更新或权限判断逻辑
        })
        .catch(err => console.log(err));
    }
    

测试验证

切换账户后,确认Excel标题栏已显示新账户,再点击测试按钮调用带forceRefresh: true的getAccessToken,此时解码后的JWT应包含新账户的用户名等信息,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:47:14