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

求助:如何用Power Query将Outlook全局通讯簿完整导入Excel/Power BI?

如何用Power Query导入Outlook全局通讯簿到Excel/Power BI(Office365环境)

问题背景

使用Exchange.Contents仅能获取部分用户,无法获取完整Outlook全局通讯簿;尝试Active Directory相关代码时提示「域名不存在」,且对AD操作不熟悉。

原Exchange.Contents代码:

let
Source = Exchange.Contents("XYZ.com"),
People = Source{[Name="People"]}[Data]
in
People

原Active Directory代码:

let
Source = ActiveDirectory.Domains("CompanyDomain.com"),
CompanyDomain.com = Source{[Domain = "CompanyDomain.com"]}[Object Categories],
user = CompanyDomain.com{[Category = "user"]}[Objects],
#"Removed Other Columns" = Table.SelectColumns(user, {"displayName", "user", 
"organizationalPerson"}),
#"Expanded organizationalPerson" = Table.ExpandRecordColumn(#"Removed Other Columns", 
"organizationalPerson", {"department"}, {"department"}),
#"Expanded user 1" = Table.ExpandRecordColumn(#"Expanded organizationalPerson", "user", 
{"mail"}, {"mail"})
in
#"Expanded user 1"

可行解决方案

方案1:使用Azure AD连接器获取完整用户列表(Office365环境推荐)

Office365的全局通讯簿数据同步自Azure Active Directory,直接连接Azure AD可获取最完整的用户信息,步骤如下:

  1. 在Excel/Power BI中,点击「数据」>「获取数据」>「从Azure」>「从Azure Active Directory」
  2. 选择「获取用户」,点击「连接」
  3. 使用Office365账号登录授权后,Power Query将加载所有Azure AD用户,包含姓名、邮箱、部门等GAL中的信息
  4. 按需筛选、整理列,比如保留DisplayName、Mail、Department等字段

对应的Power Query M代码示例:

let
    Source = AzureAD.Contents(),
    Users = Source{[Name="Users"]}[Data],
    #"Selected Columns" = Table.SelectColumns(Users, {"displayName", "mail", "department"})
in
    #"Selected Columns"

方案2:修正Exchange Online连接获取全局通讯簿

Exchange.Contents("XYZ.com")默认返回的是个人联系人文件夹,而非全局通讯簿。若需通过Exchange API获取GAL,可使用以下方式:
新建空白查询,打开高级编辑器,替换为以下代码(替换your-tenant.onmicrosoft.com为公司Office365租户域名):

let
    Source = Json.Document(Web.Contents("https://outlook.office365.com/api/v2.0/me/people", [Headers=[Authorization="Bearer " & Token]]))
    // Token将通过Power Query内置OAuth2流程自动处理授权
in
    Source

注:此方法需处理OAuth授权,操作复杂度高于Azure AD方案,优先推荐方案1。

方案3:修复Active Directory代码(仅适用于本地AD同步场景)

若公司Office365与本地Active Directory同步,且你拥有本地AD访问权限,可按以下方式修正代码:

  • 确保your-local-domain.com为本地AD域名(而非Office365租户域名)
  • 确认处于域环境内或已连接公司VPN
  • 修正变量命名(变量名不能包含.,如将CompanyDomain.com改为CompanyDomain)

修正后的代码示例:

let
    Source = ActiveDirectory.Domains("your-local-domain.com"),
    CompanyDomain = Source{[Domain = "your-local-domain.com"]}[Object Categories],
    Users = CompanyDomain{[Category = "user"]}[Objects],
    #"Selected Columns" = Table.SelectColumns(Users, {"displayName", "user", "organizationalPerson"}),
    #"Expanded organizationalPerson" = Table.ExpandRecordColumn(#"Selected Columns", "organizationalPerson", {"department"}, {"department"}),
    #"Expanded user" = Table.ExpandRecordColumn(#"Expanded organizationalPerson", "user", {"mail"}, {"mail"})
in
    #"Expanded user"

注意事项

  • Office365环境下优先使用Azure AD连接器,无需依赖本地AD,数据与GAL完全同步
  • 使用Exchange或AD连接器时,确保账号具备读取用户信息的权限
  • 若遇权限问题,联系公司IT管理员调整账号权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:10:18