如何为SSIS配置OData源连接以获取SharePoint文档?
问题分析
OData源仅适用于访问SharePoint列表数据(以XML/JSON格式暴露),无法直接解析文档库中存储的Excel二进制文件,因此需要换用以下方法:
方法一:脚本任务+SharePoint CSOM下载文件到本地
通过C#脚本调用SharePoint Online CSOM库,将目标Excel文件下载到本地临时路径,再用Excel源组件处理:
- 在SSIS包中添加脚本任务,选择C#作为脚本语言。
- 在脚本项目中安装NuGet包
Microsoft.SharePointOnline.CSOM(用于SharePoint认证和文件操作)。 - 替换以下示例代码中的参数,实现文件下载:
using Microsoft.SharePoint.Client; using System.IO; using System.Security; public void Main() { // 配置参数 string siteUrl = "https://jeffersonkyschools.sharepoint.com/sites/CTE"; string libraryName = "REPORTS"; string[] targetFiles = { "Current Pathways.xlsx", "Prior Pathways.xlsx" }; string localTempPath = @"C:\SSIS_Temp_Files\"; // 自定义本地临时路径 // 创建本地目录(如果不存在) if (!Directory.Exists(localTempPath)) { Directory.CreateDirectory(localTempPath); } // 构建SharePoint认证凭据 SecureString securePwd = new SecureString(); foreach (char c in "你的工作密码".ToCharArray()) { securePwd.AppendChar(c); } ClientContext spContext = new ClientContext(siteUrl); spContext.Credentials = new SharePointOnlineCredentials("你的工作邮箱", securePwd); // 循环下载目标文件 foreach (string fileName in targetFiles) { string fileRelativeUrl = $"/sites/CTE/{libraryName}/{fileName}"; File spFile = spContext.Web.GetFileByServerRelativeUrl(fileRelativeUrl); spContext.Load(spFile); spContext.ExecuteQuery(); // 将文件写入本地 using (FileStream localStream = new FileStream(Path.Combine(localTempPath, fileName), FileMode.Create)) { spFile.OpenBinaryStream().Value.CopyTo(localStream); } } Dts.TaskResult = (int)ScriptResults.Success; }
- 下载完成后,添加Excel源组件,连接本地临时路径的Excel文件,进行后续数据处理。
方法二:Power Query源直接读取SharePoint Excel文件
利用SSIS的Power Query源组件,直接连接SharePoint文档库并读取Excel内容:
- 在SSIS包中添加Power Query源组件,双击打开编辑器。
- 点击"新建",选择从其他源 -> SharePoint Online列表,输入站点URL:
https://jeffersonkyschools.sharepoint.com/sites/CTE。 - 选择"Microsoft Online Services"认证方式,输入工作邮箱和密码,点击连接。
- 在导航器中选择
REPORTS文档库,找到目标Excel文件,点击"加载到编辑器"。 - 在Power Query编辑器中,点击文件行的"内容"列右侧的展开按钮,选择要加载的Excel工作表,完成数据预览后关闭编辑器。
- 配置Power Query源的输出列,即可将Excel数据传递给后续SSIS组件。
方法三:HTTP连接管理器+脚本任务下载文件
如果无法使用CSOM库,可通过SharePoint REST API结合HTTP连接管理器实现文件下载:
- 添加HTTP连接管理器,配置如下:
- 服务器URL:
https://jeffersonkyschools.sharepoint.com/sites/CTE/_api/web/GetFileByServerRelativeUrl('/sites/CTE/REPORTS/Current Pathways.xlsx')/$value - 身份验证类型:
Microsoft Online Services,输入工作邮箱和密码。
- 服务器URL:
- 添加脚本任务,编写代码调用HTTP连接管理器下载文件:
using System.Net.Http; using System.IO; public void Main() { string localSavePath = @"C:\SSIS_Temp_Files\Current Pathways.xlsx"; var httpConn = Dts.Connections["HTTP_SharePoint_Current"]; // 替换为你的HTTP连接管理器名称 var handler = httpConn.AcquireConnection(null) as HttpClientHandler; using (HttpClient client = new HttpClient(handler)) { byte[] fileBytes = client.GetByteArrayAsync(httpConn.ConnectionString).Result; File.WriteAllBytes(localSavePath, fileBytes); } // 重复上述逻辑处理Prior Pathways.xlsx Dts.TaskResult = (int)ScriptResults.Success; }
- 后续同样使用Excel源组件处理本地文件。
内容的提问来源于stack exchange,提问作者JimmyG
相关产品推荐
相关产品推荐

