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

使用SharePoint Online REST API向列表Person列添加单/多值

在SharePoint Online列表的Person类型列中添加单个/多个用户值(基于全名)

要给SharePoint Online列表的Person类型列赋值,不能直接使用用户全名,必须先通过全名找到对应的SharePoint用户对象,获取其ID后,再用FieldUserValue构造有效值。以下是完善后的Python代码,支持单个和多个用户的添加场景:

完整代码实现

from office365.runtime.auth.client_credential import ClientCredential
from office365.sharepoint.fields.user_value import FieldUserValue
from office365.sharepoint.client_context import ClientContext
import xlrd

# 连接与认证配置
site_url = "https://tenant.sharepoint.com/sites/xxxxxxxx"
tenant = "tenant"
client_id = "clientid"
thumbprint = "tp"
cert_path = r"C:\Users\f034067\OneDrive - Aethra Sistemas Automotivos S.A\Área de Trabalho\xxxxxxx.pem"

def get_user_id_by_fullname(ctx, fullname):
    """根据用户全名获取SharePoint用户ID"""
    try:
        # 通过用户显示名称查找用户
        user = ctx.web.site_users.get_by_title(fullname)
        ctx.load(user)
        ctx.execute_query()
        return user.id
    except Exception as e:
        print(f"查找用户 {fullname} 失败: {e}")
        return None

try:
    print("Authenticating...")
    ctx = ClientContext(site_url).with_client_certificate(tenant, client_id, thumbprint, cert_path=cert_path)
    print("Successfully authenticated.")
except Exception as e:
    print(f"Authentication error: {e}")
    exit()

sp_list = ctx.web.lists.get_by_title("Senior acessos")

# --- 场景1:添加单个用户 ---
target_user_id = get_user_id_by_fullname(ctx, "Thiago Luan Pereira")
if target_user_id:
    # 构造Person列的值(需确认列的实际内部名称)
    person_value = FieldUserValue.from_user_id(target_user_id)
    new_item = sp_list.add_item({
        "Name": person_value
    }).execute_query()
    print("单个用户添加成功")

# --- 场景2:添加多个用户 ---
user_fullnames = ["Thiago Luan Pereira", "John Doe", "Jane Smith"]
user_ids = []
for name in user_fullnames:
    uid = get_user_id_by_fullname(ctx, name)
    if uid:
        user_ids.append(uid)

if user_ids:
    # 构造多用户值列表(需确保Person列已启用允许多选)
    multi_person_values = [FieldUserValue.from_user_id(uid) for uid in user_ids]
    new_multi_item = sp_list.add_item({
        "Name": multi_person_values
    }).execute_query()
    print("多个用户添加成功")

关键说明

  • 确认列内部名称:代码中"Name"是Person列的内部名称,若你的列显示名称和内部名称不一致,需在SharePoint列表设置中查看实际内部名称(通常为无空格的英文标识)。
  • 重名处理:若存在同名用户,get_by_title会返回第一个匹配结果,如需精确匹配,可修改逻辑为按邮箱等唯一标识过滤用户。
  • 多用户前提:添加多个用户时,必须确保该Person列在SharePoint列表设置中已开启「允许多选」选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:47:11