使用SharePoint Online REST API向列表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
相关产品推荐
相关产品推荐

