如何将Excel Online工作表导入SSIS与SQL?Python尝试未果
Excel Online 工作表导入SQL(免费方案)及SSIS导入方法
一、免费导入SQL的可行方法
1. 修正Python+Microsoft Graph API方案(解决你之前的失败问题)
如果之前用Python没成功,大概率是认证或API调用环节出错,以下是完整可运行的步骤:
- 先注册一个免费的Azure AD应用(个人账号即可),获取客户端ID、租户ID,并给应用添加
Files.Read.All和Sites.Read.All的Graph API委托权限。 - 安装依赖包:
pip install msal pandas pyodbc - 示例代码:
首次运行会弹出浏览器登录Office 365账号授权,后续可改用静默认证模式。import msal import pandas as pd import pyodbc # 配置参数 CLIENT_ID = "你的客户端ID" TENANT_ID = "你的租户ID" EXCEL_FILE_ID = "Excel Online文件的ID(从URL中获取)" SHEET_NAME = "要导入的工作表名" SQL_CONN_STR = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的SQL服务器;DATABASE=目标库;UID=用户名;PWD=密码" # 获取Graph API令牌 app = msal.PublicClientApplication(CLIENT_ID, authority=f"https://login.microsoftonline.com/{TENANT_ID}") result = app.acquire_token_interactive(scopes=["https://graph.microsoft.com/Files.Read.All"]) access_token = result["access_token"] # 读取Excel Online数据 url = f"https://graph.microsoft.com/v1.0/me/drive/items/{EXCEL_FILE_ID}/workbook/worksheets/{SHEET_NAME}/usedRange" headers = {"Authorization": f"Bearer {access_token}"} df = pd.read_json(url, headers=headers) df = pd.json_normalize(df["values"]) # 写入SQL Server conn = pyodbc.connect(SQL_CONN_STR) cursor = conn.cursor() # 请根据实际表结构调整字段和插入语句 for _, row in df.iterrows(): cursor.execute("INSERT INTO 目标表(字段1,字段2) VALUES (?,?)", row[0], row[1]) conn.commit() conn.close()
2. 导出CSV+SQL Server导入向导(零代码免费方案)
这是最易上手的免费方法:
- 在Excel Online中打开目标工作表,点击「文件」→「下载」→「逗号分隔值(.csv)」,将文件导出到本地。
- 打开SQL Server Management Studio(SSMS),连接目标SQL服务器,右键目标数据库→「任务」→「导入数据」。
- 在导入向导中:
- 数据源选择「平面文件源」,指向导出的CSV文件,配置分隔符、编码等参数。
- 目标选择「SQL Server Native Client 11.0」,确认服务器和数据库信息。
- 配置字段映射(自动匹配或手动调整),完成导入。
二、将Excel Online工作表导入SSIS的方法
1. 使用SSIS Office 365 Excel连接器
SSIS官方提供Office 365 Excel数据源组件(适用于SQL Server 2019及以上版本或SSIS Integration Runtime):
- 打开SSIS项目,在「数据流」选项卡中添加「Office 365 Excel Source」组件。
- 配置连接管理器:
- 选择「Office 365 Excel」连接类型,输入Excel Online文件的URL(或从OneDrive/SharePoint选择)。
- 选择认证方式:可用「用户名和密码」(你的Office 365账号)或「服务主体」(对应之前的Azure AD应用)。
- 配置数据源,选择要导入的工作表,连接到「SQL Server Destination」组件,配置目标表和字段映射后运行包即可。
2. SSIS脚本任务调用Microsoft Graph API
如果连接器无法满足需求,可通过脚本任务自定义实现:
- 在SSIS数据流中添加「脚本任务」,选择C#作为脚本语言。
- 在脚本编辑器中安装
Microsoft.Graph和Microsoft.Identity.ClientNuGet包。 - 编写代码获取Excel Online数据(逻辑与Python方案类似),再通过ADO.NET连接写入SQL Server。示例代码片段:
// 认证部分 var app = PublicClientApplicationBuilder.Create("你的客户端ID") .WithAuthority("https://login.microsoftonline.com/你的租户ID") .Build(); var result = await app.AcquireTokenInteractive(new[] {"https://graph.microsoft.com/Files.Read.All"}) .ExecuteAsync(); var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) => { requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", result.AccessToken); return Task.CompletedTask; })); // 读取数据 var worksheet = await graphClient.Me.Drive.Items["文件ID"].Workbook.Worksheets["工作表名"].UsedRange.Request().GetAsync(); // 此处省略数据转换和SQL插入逻辑,可使用SqlConnection实现
内容的提问来源于stack exchange,提问作者Davxd
相关产品推荐
相关产品推荐

