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

如何使用Python代码将.csv或Excel工作簿直接上传至SharePoint?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:30:58