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

如何在启用双因素认证的SharePoint中读取Excel为Pandas DataFrame?

解决SharePoint双因素认证下读取Excel到Pandas DataFrame的问题

原代码使用的acquire_token_for_user仅支持无MFA的账号密码认证,启用双因素认证后必须改用支持MFA的认证流程,**设备代码流(Device Code Flow)**是适合Jupyter Notebook这类交互式环境的最优方案,以下是具体实现:

步骤1:安装依赖(若未安装)

pip install office365-python-sdk azure-identity

步骤2:替换为支持MFA的认证代码

import io
import pandas as pd
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
from azure.identity import DeviceCodeCredential

# 替换为你的SharePoint站点根URL(不是文件的直接共享链接)
site_url = "https://COMPANY.sharepoint.com/sites/COMPANYNAME"
# 替换为文件在站点内的相对路径(从站点根目录开始)
file_relative_url = "/sites/COMPANYNAME/Shared Documents/你的文件路径/目标Excel文件.xlsx"
# 替换为公司Azure AD租户ID或域名(如COMPANY.onmicrosoft.com)
tenant_id = "YOUR_TENANT_ID_OR_COMPANY_DOMAIN"
# SharePoint API权限范围,无需修改
scopes = ["https://COMPANY.sharepoint.com/.default"]

# 初始化设备代码认证器
credential = DeviceCodeCredential(tenant_id=tenant_id)
# 获取访问令牌(运行后会弹出验证提示)
token = credential.get_token(*scopes)

# 创建带令牌的SharePoint上下文
ctx = ClientContext(site_url).with_access_token(token.token)

# 读取文件二进制内容
response = File.open_binary(ctx, file_relative_url)

# 转换为Pandas可读取的对象
bytes_file_obj = io.BytesIO(response.content)
bytes_file_obj.seek(0)
df = pd.read_excel(bytes_file_obj, sheet_name=None)

# 验证读取结果
print("读取的工作表列表:", list(df.keys()))

关键说明

  • 必须使用站点根URL而非文件的直接共享链接,文件路径需改为站点内的相对路径(可从SharePoint文件的"详情"中获取路径信息)。
  • 运行代码后,控制台会输出一个验证链接和验证码,打开链接并使用公司账号完成MFA验证后,代码将自动获取访问令牌并继续执行。
  • 租户ID可从Azure门户的Azure Active Directory页面获取,或直接使用公司的域名(如xxx.onmicrosoft.com)替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:02:57