使用Office365 REST Python Client获取SharePoint列表用户对象问题
问题解决方法
首先明确两个核心根因:
- 你配置的JSON是列前端格式化规则,仅控制页面上的显示效果,不会真的把用户邮箱写入列表的
Email字段后端存储。手动录入Email字段有值是你主动填了后端存储,规则生成的显示值不会落库,所以读取返回None。 - 自定义
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
相关产品推荐
相关产品推荐

