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

如何通过SharePoint .odc文件将CSV数据导入Pandas DataFrame?

解决从SharePoint ODC连接提取CSV到Pandas DataFrame的问题

你的问题在于直接复用了Excel Power Query专属的ODC连接字符串到PyODBC中,这行不通——Microsoft.Mashup.OleDb.1是Excel Power Query特有的驱动,依赖Excel的运行环境;$Workbook$是Excel内部的占位符,Python无法识别;另外ODC里的Location和CommandText只是Power Query内部的数据源标识,不是实际可直接访问的CSV URL。

下面给出两步解决思路,直接绕过OLEDB驱动,直接获取并读取SharePoint的CSV文件:

步骤1:获取SharePoint列表视图的实际CSV下载URL

你可以通过两种方式拿到这个URL:

  • 方法一:从浏览器复制:打开你的SharePoint列表视图页面,找到「导出到CSV」的按钮(通常在列表顶部的「导出」菜单里),右键选择「复制链接地址」,得到完整的CSV下载URL。
  • 方法二:构造URL:基于ODC里的ListViewID=52,构造格式如下的URL:
    https://<你的SharePoint站点URL>/_vti_bin/owssvr.dll?CS=109&Using=_layouts/15/query.iqy&List=52&CSV=1
    
    把<你的SharePoint站点URL>替换成实际的站点地址(比如https://contoso.sharepoint.com/sites/YourSite)。

步骤2:通过Python读取带认证的CSV文件

因为SharePoint Office 365需要身份验证,这里提供两种常用的实现方式:

方式一:使用office365-rest-python-client(推荐,官方风格认证)

首先安装依赖:

pip install office365-rest-python-client pandas

然后编写代码:

from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential
import pandas as pd
import io

# 配置你的SharePoint信息
site_url = "https://contoso.sharepoint.com/sites/YourSite"
username = "your-email@contoso.com"
password = "your-password"  # 注意:如果账号开启了MFA,需要使用「应用密码」而非普通登录密码

# 初始化认证上下文
ctx = ClientContext(site_url).with_credentials(UserCredential(username, password))

# 替换成你拿到的CSV下载URL
csv_url = f"{site_url}/_vti_bin/owssvr.dll?CS=109&Using=_layouts/15/query.iqy&List=52&CSV=1"

# 提取相对路径并下载文件内容
relative_path = csv_url.split(site_url)[1]
file_content = ctx.web.get_file_by_server_relative_url(relative_path).download()
ctx.execute_query()

# 读取到Pandas DataFrame
df = pd.read_csv(io.BytesIO(file_content.content))

# 验证结果
print(df.head())

方式二:使用requests+requests-ntlm(轻量方案)

如果不想引入SharePoint专用库,可以用requests配合NTLM认证:

pip install requests requests-ntlm pandas

代码示例:

import requests
from requests_ntlm import HttpNtlmAuth
import pandas as pd
import io

site_url = "https://contoso.sharepoint.com/sites/YourSite"
csv_url = f"{site_url}/_vti_bin/owssvr.dll?CS=109&Using=_layouts/15/query.iqy&List=52&CSV=1"
username = "your-email@contoso.com"
password = "your-password"  # MFA账号同样需要用应用密码

# 创建带认证的会话
session = requests.Session()
session.auth = HttpNtlmAuth(username, password)

# 请求CSV内容
response = session.get(csv_url)
response.raise_for_status()  # 如果请求失败会抛出异常

# 读取到DataFrame
df = pd.read_csv(io.StringIO(response.text))

print(df.head())

额外注意事项

  • 如果你的账号启用了多重身份验证(MFA),普通密码无法直接使用,需要在Microsoft 365管理中心生成「应用密码」,或者改用OAuth2认证方案(可以参考msal库的文档实现)。
  • 确保你拥有该SharePoint列表的读取权限,否则会返回403错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:37:31