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

通过REST API访问SharePoint上的Excel并同步数据至MS SQL

问题解决:使用Office365 Python库访问SharePoint中的Excel数据

业务场景与方案背景

用户无法将全部所需数据录入ERP系统,通过维护Excel文件存储这类数据。为开展规划工作,需将该Excel数据与ERP数据库数据合并到新Excel文件,支持添加批注,并每日用最新ERP数据更新文件。

计划通过Python脚本实现:夜间采集Excel数据,加载至MS SQL完成数据转换,再将结果回传至SharePoint替换旧文件。当前核心难点是使用Office365 Python库访问SharePoint上的Excel文件。

实现方案

以下提供两种可行方案,满足读取Excel数据并转换为Pandas DataFrame的需求:

方案1:直接读取Excel指定范围数据

通过Office365库直接操作Excel对象,读取指定工作表和单元格范围:

首先安装依赖库:

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

# 配置参数
SHAREPOINT_USERNAME = "Username@company.com"
SHAREPOINT_PASSWORD = "Password"
SHAREPOINT_SITE_URL = "https://yourcompany.sharepoint.com/sites/YourTargetSite"
SHAREPOINT_DOC_LIBRARY = "Documents"  # 目标文档库名称
FILE_RELATIVE_PATH = "Path/To/NeededData.xls"  # 文件相对于文档库的路径
SHEET_NAME = "Sheet 1"
RANGE_ADDRESS = "A1:D20"

# 建立SharePoint连接
ctx = ClientContext(SHAREPOINT_SITE_URL).with_credentials(
    UserCredential(SHAREPOINT_USERNAME, SHAREPOINT_PASSWORD)
)

# 获取目标Excel文件对象
server_relative_url = f"/{SHAREPOINT_DOC_LIBRARY}/{FILE_RELATIVE_PATH}"
file = ctx.web.get_file_by_server_relative_url(server_relative_url)
ctx.load(file)
ctx.execute_query()

# 读取指定工作表的目标范围数据
workbook = file.open_excel()
worksheet = workbook.worksheet(SHEET_NAME)
range_data = worksheet.range(RANGE_ADDRESS).values
ctx.execute_query()

# 转换为Pandas DataFrame(假设第一行为表头)
df = pd.DataFrame(range_data[1:], columns=range_data[0])

# --- 后续写入MS SQL示例(需安装sqlalchemy和pyodbc)---
# from sqlalchemy import create_engine
# engine = create_engine(
#     "mssql+pyodbc://sql_username:sql_password@sql_server/db_name?driver=ODBC+Driver+17+for+SQL+Server"
# )
# df.to_sql("target_table_name", engine, if_exists="replace", index=False)

方案2:先下载Excel文件再读取

若直接操作Excel对象遇到权限或版本兼容问题,可先将文件下载至本地服务器,再用Pandas读取:

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

# 配置参数
SHAREPOINT_USERNAME = "Username@company.com"
SHAREPOINT_PASSWORD = "Password"
SHAREPOINT_SITE_URL = "https://yourcompany.sharepoint.com/sites/YourTargetSite"
SHAREPOINT_DOC_LIBRARY = "Documents"
FILE_RELATIVE_PATH = "Path/To/NeededData.xls"
LOCAL_TEMP_PATH = "./temp_NeededData.xls"  # 本地临时文件路径
SHEET_NAME = "Sheet 1"
RANGE = "A1:D20"

# 建立SharePoint连接
ctx = ClientContext(SHAREPOINT_SITE_URL).with_credentials(
    UserCredential(SHAREPOINT_USERNAME, SHAREPOINT_PASSWORD)
)

# 下载文件到本地
server_relative_url = f"/{SHAREPOINT_DOC_LIBRARY}/{FILE_RELATIVE_PATH}"
file = ctx.web.get_file_by_server_relative_url(server_relative_url)
with open(LOCAL_TEMP_PATH, "wb") as local_file:
    file.download(local_file).execute_query()

# 用Pandas读取指定范围数据
df = pd.read_excel(LOCAL_TEMP_PATH, sheet_name=SHEET_NAME, usecols=RANGE)

# 清理临时文件
os.remove(LOCAL_TEMP_PATH)

# --- 后续写入MS SQL代码同方案1 ---

注意事项

  • 确保使用的Office365库为最新稳定版,避免兼容性问题
  • 验证账号对目标SharePoint站点、文档库及文件拥有读写权限
  • 若账号启用了多因素认证(MFA),需改用应用权限或证书认证方式,上述代码仅支持账号密码认证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:55