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

使用Pandas读取SharePoint Excel文件出现XLRDError报错如何解决?

报错原因

你拿到的返回内容开头是b'\r\n<!DOCT',对应HTML文档的DOCTYPE声明头,说明你请求拿到的根本不是Excel二进制文件,是SharePoint的网页页面(大概率是权限验证页、文件预览页),所以pandas调用xlrd解析的时候识别不到Excel文件的标准BOF头,才抛出该错误。

核心错误点是你代码中两个url参数混用:

  1. 初始化AuthenticationContext用的是SharePoint站点的根地址,格式一般为https://<租户名>.sharepoint.com/sites/<站点名>
  2. 调用File.open_binary用的应该是Excel文件的实际直链/服务器相对路径,你两个参数填了同一个地址,自然返回的是站点页面而非文件内容。
解决方案

步骤1:获取正确的Excel文件路径

打开SharePoint中目标Excel文件,按以下操作拿直链:

  • 点击顶部菜单栏「文件」-「信息」-「复制路径」
  • 删掉复制到的路径末尾的?web=1后缀,得到的就是文件的完整直链
  • 如果你要用服务器相对路径,格式为/sites/<站点名>/<文档库名>/<子文件夹>/<文件名>.xlsx

步骤2:修改代码

拆分两个url参数,修正后的代码如下:

from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext
import pandas as pd
import io

# 站点根地址,用于身份验证
site_url = 'https://xxx.sharepoint.com/sites/你的站点名'
# Excel文件的完整直链/服务器相对路径
file_path = '/sites/你的站点名/Shared Documents/测试文件.xlsx'
username = '你的账号'
password = '你的密码'

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(username, password):
    ctx = ClientContext(site_url, ctx_auth)
    # 验证身份通过
    print("Authentication successful")
    
    # 读取文件流
    response = ctx.web.get_file_by_server_relative_path(file_path).open_binary_stream().execute_query()
    
    # 转成BytesIO读入pandas
    bytes_file_obj = io.BytesIO(response.value)
    df = pd.read_excel(bytes_file_obj)
    print(df)

异常排查

  • 先验证返回内容类型:可在拿到响应后加一行代码with open("test.tmp", "wb") as f: f.write(response.value),打开文件如果是HTML内容,优先检查账号是否有该文件的读取权限,账号是否开启了多因素认证(MFA),Office365 SDK不支持MFA账号登录,需关闭MFA或使用应用密码。
  • 不要尝试用read_csv读取非CSV格式的内容,你之前拿到的全在一列的结果本质是HTML标签,不是有效表格数据,解决返回内容的问题后不需要再调用该方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:36:03