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

Python请求SharePoint下载xlsx文件返回200但本地文件损坏无法打开

SharePoint下载xlsx文件损坏修复方案

核心原因

  • 状态码200仅代表请求得到正常响应,不代表返回的是xlsx二进制内容。绝大多数情况是返回了SharePoint的身份验证跳转页、文件预览页的HTML内容,你用记事本打开本地损坏的test.xlsx就能看到HTML源码,而非乱序的二进制内容。
  • 企业SharePoint默认不支持HTTPBasicAuth认证,你使用的认证方式不匹配。
  • 你填入的file链接大概率是文件预览页地址,不是文件的直接下载链接。

修复步骤

1. 先验证返回内容

在现有代码的请求逻辑后加一行代码,确认返回内容格式:

# 输出前500个字符判断是否为HTML
print(resp.text[:500])

如果输出包含<html>、<head>这类标签,就符合上述返回网页的问题。

2. 修正文件下载链接

在SharePoint站点找到目标文件,右键选择「复制链接」,将链接中的?web=1这类预览参数删掉,得到纯文件直链。

3. 替换适配的认证方式

企业本地部署的SharePoint一般使用NTLM认证,先安装对应依赖:
pip install requests_ntlm
修正后的代码如下:

import requests
from requests_ntlm import HttpNtlmAuth

# 替换为实际的文件直链
file_url = "替换为你拿到的SharePoint文件直链"
username = '你的域名\\你的用户名' # 注意域名和用户名之间用双反斜杠
password = '你的密码'

resp = requests.get(file_url, auth=HttpNtlmAuth(username, password))
# 验证返回内容类型是否为xlsx,正常返回值为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
print(resp.headers.get('Content-Type'))

with open('test.xlsx', 'wb') as f:
    f.write(resp.content)

4. Office 365 SharePoint Online 适配

如果你使用的是线上版SharePoint Online,需要安装专用库:
pip install Office365-REST-Python-Client
对应代码示例:

from office365.runtime.auth.user_credential import UserCredential
from office365.sharepoint.client_context import ClientContext

site_url = "你的SharePoint站点地址"
# 站点内的文件相对路径,比如/Shared Documents/test.xlsx
file_relative_url = "替换为文件相对路径"
username = "你的账号"
password = "你的密码"

ctx = ClientContext(site_url).with_credentials(UserCredential(username, password))
response = ctx.web.get_file_by_server_relative_url(file_relative_url).download()
with open("test.xlsx", "wb") as f:
    f.write(response)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:51:01