如何在启用双因素认证的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
相关产品推荐
相关产品推荐

