如何使用O365 Python API下载SharePoint列表至DataFrame并更新?
一、将SharePoint列表下载为Pandas DataFrame
你的代码可以优化,直接利用列表的字段定义获取准确列名,避免收集冗余系统属性。以下是改进后的实现:
from O365.sharepoint import Site import pandas as pd def get_list_items(site: Site, list_name: str) -> pd.DataFrame: target_list = site.get_list_by_name(display_name=list_name) # 获取列表字段的内部名称与显示名映射 list_fields = {field.internal_name: field.display_name for field in target_list.fields} list_items = target_list.get_items() data = [] for item in list_items: item_data = {} # 按列表定义的字段提取值,用显示名作为DataFrame列名 for internal_name, display_name in list_fields.items(): item_data[display_name] = item.properties.get(internal_name) data.append(item_data) return pd.DataFrame(data)
关键优化说明:
- 直接通过
target_list.fields获取官方定义的字段,过滤item.properties中的冗余系统字段(如Created、ModifiedBy) - 针对特殊类型字段可额外处理,比如日期字段转换:
# 示例:将Modified字段转为datetime类型 item_data[display_name] = pd.to_datetime(item.properties.get(internal_name)) if internal_name == "Modified" else item.properties.get(internal_name)
二、更新SharePoint列表项
更新列表项需先获取目标item对象,修改属性后提交更改:
def update_list_item(site: Site, list_name: str, item_id: int, update_data: dict): target_list = site.get_list_by_name(display_name=list_name) # 通过ID定位要更新的项 target_item = target_list.get_item_by_id(item_id) # 用字段内部名称赋值 for internal_name, new_value in update_data.items(): target_item.properties[internal_name] = new_value # 提交更新请求 target_item.update()
使用示例:
# 更新ID为1的项,修改Title和Amount字段 update_data = { "Title": "新标题", "Amount": 100 } update_list_item(your_site_instance, "你的列表名称", 1, update_data)
注意事项:
- 必须使用字段的内部名称修改属性,可通过
target_list.fields查看映射关系 - 特殊类型字段需传入对应格式值:比如查找字段需传
{"LookupId": 目标ID},人员字段需传用户ID或邮箱对应结构 - 确保应用账号拥有列表编辑权限
内容的提问来源于stack exchange,提问作者Godspower
相关产品推荐
相关产品推荐

