如何使用Python代码将.csv或Excel工作簿直接上传至SharePoint?
当然可以用Python直接上传CSV或Excel文件到SharePoint,下面是两种实用的实现方案:
方法一:用office365-rest-python-client库(推荐)
这个第三方库封装了SharePoint的REST API,操作简单,不需要自己处理复杂的认证和请求细节。
前置准备
- 先安装库:
pip install office365-rest-python-client - 准备好这些信息:SharePoint站点URL(比如
https://your-domain.sharepoint.com/sites/your-team-site)、目标文档库名称(默认一般是Documents)、你的Office365账号和密码(如果是企业账号,注意是否开启MFA)
上传代码示例
from office365.sharepoint.client_context import ClientContext from office365.runtime.auth.user_credential import UserCredential # 替换成你的实际信息 site_url = "https://your-domain.sharepoint.com/sites/your-team-site" username = "your-work-account@your-domain.com" password = "your-password" doc_library = "Documents" local_file = "./data/sample.csv" # 本地要上传的文件路径,支持.xlsx uploaded_file_name = "uploaded_sample.csv" # 上传后在SharePoint显示的文件名 # 建立与SharePoint的连接 ctx = ClientContext(site_url).with_credentials(UserCredential(username, password)) # 获取目标文档库对象 target_library = ctx.web.lists.get_by_title(doc_library) ctx.load(target_library) ctx.execute_query() # 读取本地文件并上传 with open(local_file, 'rb') as f: uploaded_file = target_library.root_folder.upload_file(uploaded_file_name, f).execute_query() print(f"文件上传成功,SharePoint路径:{uploaded_file.serverRelativeUrl}")
扩展说明
- 如果要上传到文档库的子文件夹,把
target_library.root_folder换成子文件夹对象即可,比如target_library.root_folder.folders.get_by_name("SubFolder") - 如果账号开启了MFA,账号密码认证会失效,需要改用Azure AD应用权限认证,用
ClientCredential(client_id, client_secret)替代UserCredential,前提是要在Azure AD里注册应用并赋予SharePoint的读写权限
方法二:直接调用SharePoint REST API(无依赖)
不想用第三方库的话,可以直接发HTTP请求调用API,步骤稍微繁琐一点,但灵活性更高。
上传代码示例
import requests from requests.auth import HTTPBasicAuth # 替换成你的实际信息 site_url = "https://your-domain.sharepoint.com/sites/your-team-site" username = "your-work-account@your-domain.com" password = "your-password" doc_library = "Documents" local_file = "./data/report.xlsx" uploaded_file_name = "monthly_report.xlsx" # 第一步:获取请求令牌 token_url = f"{site_url}/_api/contextinfo" resp = requests.post( token_url, auth=HTTPBasicAuth(username, password), headers={"Accept": "application/json;odata=verbose"} ) form_digest = resp.json()['d']['GetContextWebInformation']['FormDigestValue'] # 第二步:上传文件 upload_url = f"{site_url}/_api/web/GetFolderByServerRelativeUrl('{doc_library}')/Files/add(url='{uploaded_file_name}', overwrite=true)" with open(local_file, 'rb') as f: headers = { "X-RequestDigest": form_digest, # 根据文件类型设置Content-Type:CSV用"text/csv",Excel用下面这个 "Content-Type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" } upload_resp = requests.post( upload_url, auth=HTTPBasicAuth(username, password), headers=headers, data=f ) if upload_resp.status_code == 200: print("文件上传成功") else: print(f"上传失败,错误码:{upload_resp.status_code},详情:{upload_resp.text}")
注意点
- 务必根据文件类型设置正确的
Content-Type,否则可能导致文件损坏 - MFA账号同样无法用这种方式的账号密码认证,需要改用应用权限的令牌获取方式
内容的提问来源于stack exchange,提问作者codingrainha
相关产品推荐
相关产品推荐

