将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
相关产品推荐
相关产品推荐

