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

将SharePoint存储的Excel下载到Python环境时出现无法识别文件错误

问题原因

  • 使用了错误的文件请求URL:你当前传入的是SharePoint的Excel网页预览跳转链接,不是文件的实际资源路径。File.open_binary方法要求传入的是文件的站点相对路径或者SharePoint REST文件资源地址,用预览页URL请求返回的response.content实际是HTML网页内容,并非Excel二进制流,因此pandas无法识别。
  • URL存在拼写错误:你提供的URL中file=Test%20File%20xlsx部分,文件名后缀前的点被错误编码为空格,实际应该为Test%20File.xlsx,这也会导致请求返回非Excel内容。

修复方案

首先需要替换为正确的站点根地址和文件相对路径,SharePoint文件的站点相对路径格式通常为/sites/你的站点名/文档库名称/文件夹路径/文件名.xlsx,修复后的代码如下:

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

# 替换为SharePoint站点根地址,不要带文件预览后缀
site_url = "https://mydomain.sharepoint.com/sites/SharePointSiteName"
# 替换为文件的实际站点相对路径,以下为默认共享文档库的路径示例
file_path = "/sites/SharePointSiteName/Shared Documents/Test File.xlsx"
username = "user123@domain.com"
password = "Password123!"

ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(username, password):
    ctx = ClientContext(site_url, ctx_auth)
    response = File.open_binary(ctx, file_path)
    # 可先打印返回内容开头验证:正常xlsx文件开头为b'PK\x03\x04',如果是b'<!DOCTYPE html'说明URL仍错误
    # print(response.content[:10])
    bytes_file_obj = io.BytesIO(response.content)
    bytes_file_obj.seek(0)
    x = pd.read_excel(bytes_file_obj, sheet_name=None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:12:04