使用Python pandas读取SharePoint Excel遇XLRDError及路径问题求助
问题原因
你遇到的XLRDError本质是传入的路径对应的返回内容是SharePoint的前端网页(HTML格式),不是实际的Excel二进制文件,所以pandas调用xlrd解析时识别不到Excel的文件头。你当前拿到的https://company.sharepoint.com/sites/site/Shared%20Documents/Forms/AllItems.aspx是文档库的列表页链接,不是单个文件的直链。
- 打开目标Excel文件所在的SharePoint站点文档库,找到你要读取的文件
- 右键点击该文件,选择「复制链接」选项
- 在弹出的权限设置弹窗中,选择符合你账号访问权限的范围(通常选「组织内人员可查看」即可),点击复制得到完整链接
- 清理链接冗余参数:删除链接末尾的
?web=1这类强制跳转网页版的参数,最终保留的格式应为https://company.sharepoint.com/sites/你的站点名/Shared%20Documents/子文件夹路径/目标文件名.xlsx,不要保留包含Forms/AllItems.aspx的文件夹页路径
代码优化说明
- 注意pandas版本兼容:新版本pandas中
read_excel的工作表参数已从sheetname改为sheet_name,且默认xlrd引擎不再支持xlsx格式,需手动指定engine='openpyxl'(提前安装openpyxl:pip install openpyxl) - 站点根路径和文件路径要分开:AuthenticationContext传入的是站点根路径,File.open_binary传入的是完整文件路径,避免路径混用导致认证失败
修正后可运行代码
# 导入依赖 from office365.runtime.auth.authentication_context import AuthenticationContext from office365.sharepoint.client_context import ClientContext from office365.sharepoint.files.file import File import io import pandas as pd # 配置参数:站点根路径、完整文件路径、账号密码 site_url = "https://company.sharepoint.com/sites/你的站点名/" file_url = "https://company.sharepoint.com/sites/你的站点名/Shared%20Documents/文件夹路径/目标文件.xlsx" username = "你的工作账号@company.com" password = "你的账号密码" # 认证 ctx_auth = AuthenticationContext(site_url) if ctx_auth.acquire_token_for_user(username, password): ctx = ClientContext(site_url, ctx_auth) ctx.load(ctx.web) ctx.execute_query() print("认证成功") # 读取文件二进制内容 response = File.open_binary(ctx, file_url) # 转成BytesIO后用pandas读取 bytes_file = io.BytesIO(response.content) bytes_file.seek(0) # 读取所有工作表,指定openpyxl引擎适配xlsx格式 df_dict = pd.read_excel(bytes_file, sheet_name=None, engine="openpyxl")
内容的提问来源于stack exchange,提问作者Hector Castro
相关产品推荐
相关产品推荐

