使用Shareplum更新SharePoint列表无效果,求有效更新方法
先排查代码中的核心问题
你的代码未生效,大概率是以下几个原因,逐个修正即可:
1. ID必须为整数类型
SharePoint列表的ID是整数格式,你传入的字符串"13"会导致行匹配失败,改成整数13:
data = [{'ID': 13, 'Name': 'Teste Python'}]
2. 使用字段的内部名称而非显示名称
SharePoint列表的字段显示名称和内部名称经常不一致(比如默认标题列显示为"标题",内部名称是Title)。你可以通过以下方式查看内部名称:
- 进入SharePoint列表的「列表设置」
- 点击要修改的字段(比如你的"Name")
- 浏览器地址栏末尾
Field=xxx中的xxx就是内部名称(如Field=Name或Field=Title)
如果内部名称是Title,数据结构要改成:
data = [{'ID': 13, 'Title': 'Teste Python'}]
3. 检查请求返回结果并添加错误处理
UpdateListItems会返回操作结果,你可以打印出来确认是否成功,同时捕获异常排查问题:
try: result = sharepoint_list.UpdateListItems(data=data, kind='Update') # 检查返回的ErrorCode,0表示操作成功 if result[0]['ErrorCode'] == '0': print("更新成功") else: print(f"更新失败:{result[0]['ErrorText']}") except Exception as e: print(f"请求出错:{str(e)}")
4. 移除无用的time.sleep(3)
这个延迟对更新操作没有任何帮助,直接删除即可。
本地数据(数据库/CSV)集成到SharePoint列表的方案
如果要批量用本地数据更新SharePoint列表,按以下步骤执行:
1. 读取本地数据
- 从CSV读取:用
pandas或csv模块import pandas as pd df = pd.read_csv('本地数据.csv') - 从数据库读取:根据数据库类型使用对应库(如
pymysql、sqlalchemy)
2. 批量生成更新数据
确保每条数据包含SharePoint列表的ID(用于匹配目标行)和要更新的字段,注意字段使用内部名称:
update_data = [] for index, row in df.iterrows(): # 假设本地CSV的'id'对应SharePoint的ID,'name'对应内部名称为Name的字段 update_item = { 'ID': int(row['id']), 'Name': row['name'] } update_data.append(update_item)
3. 批量更新
直接将批量数据传入UpdateListItems,Shareplum会自动处理批量操作:
try: results = sharepoint_list.UpdateListItems(data=update_data, kind='Update') # 统计成功和失败的条目数 success_count = sum(1 for res in results if res['ErrorCode'] == '0') print(f"批量更新完成:成功{success_count}条,失败{len(results)-success_count}条") # 打印失败的详情 for res in results: if res['ErrorCode'] != '0': print(f"ID {res['ID']} 更新失败:{res['ErrorText']}") except Exception as e: print(f"批量更新出错:{str(e)}")
额外注意事项
- 权限:确保你的账号拥有SharePoint列表的编辑权限,只读权限会导致更新失败
- 定时同步:如果需要定期更新,可以用
APScheduler等工具设置定时任务 - 增量更新:数据量大时,建议只同步本地有变化的行,避免全量更新浪费资源
内容的提问来源于stack exchange,提问作者Guilherme B.
相关产品推荐
相关产品推荐

