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

使用Office365 REST Python Client获取SharePoint列表用户对象问题

问题解决方法

首先明确两个核心根因:

  1. 你配置的JSON是列前端格式化规则,仅控制页面上的显示效果,不会真的把用户邮箱写入列表的Email字段后端存储。手动录入Email字段有值是你主动填了后端存储,规则生成的显示值不会落库,所以读取返回None。
  2. 自定义User列是用户(Lookup)类型字段,默认请求下SharePoint API不会返回该字段的完整对象,同时你看到的「User」是字段显示名,API调用需要用字段内部名。

具体操作步骤

第一步:获取User字段的内部名

进入SharePoint列表设置页面,点击「User」列进入列编辑页,查看浏览器地址栏中Field=参数后面的字符串,就是该字段的内部名,比如User、User_x0020_Info等,下文统一用<用户列内部名>代替。

第二步:修改代码显式展开用户字段

使用select指定要返回的字段,expand展开用户类型字段获取完整属性,修改后的代码如下:

def enum_items(target_list):
    # 替换<用户列内部名>为你第一步查到的实际内部名
    items = target_list.items.select(["Id", "<用户列内部名>/Id", "<用户列内部名>/Title", "<用户列内部名>/Email"]).expand("<用户列内部名>")
    ctx.load(items)
    ctx.execute_query()
    for index, item in enumerate(items):
        user_obj = item.properties.get("<用户列内部名>")
        if user_obj:
            user_email = user_obj.get("Email")
            user_name = user_obj.get("Title")
            print("{0}: 用户名{1}, 邮箱{2}".format(index, user_name, user_email))
        else:
            print("{0}: 无关联用户信息".format(index))

说明

  • 不需要再读取原来的Email字段,直接从展开的用户对象中取邮箱属性即可,和页面显示的规则取值完全一致
  • 如果要获取用户的其他属性(比如部门、手机号),只要在select里添加对应字段即可,格式为<用户列内部名>/<属性名>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:06:01