在SSIS中从SharePoint批量下载.xlsx文件遇组件识别问题
嘿,我来帮你搞定这个SharePoint批量下载xlsx文件的问题,顺便解决你遇到的组件识别难题!
一、先搞定组件识别的核心问题
先敲个重点:你可能搞混了SharePoint的对象模型!SPSite是服务器端对象模型的类,而Script Task属于客户端场景,应该用**CSOM(Client Object Model)**的ClientContext来替代——这大概率是你识别不了组件的根源。
确保引用和命名空间都正确
- 如果是Visual Studio环境,先确认装对了NuGet包:
- 针对SharePoint Online:安装
Microsoft.SharePointOnline.CSOM - 针对本地SharePoint服务器:安装
Microsoft.SharePoint.Client
- 针对SharePoint Online:安装
- 脚本里必须加上这些命名空间,不然类都识别不了:
using Microsoft.SharePoint.Client; using System.IO; using System.Collections.Generic; using System.Security;
二、批量下载.xlsx文件的完整实现
下面是结合Script Task场景,遍历目标文件夹、筛选xlsx文件并下载的完整代码逻辑:
1. 初始化CSOM上下文(替代SPSite)
// 替换成你的SharePoint站点URL string siteUrl = "https://your-sharepoint-site-url"; // 替换成你的账号信息(SPO用账号密码,本地SP可以用默认凭据) string userName = "your-username"; string password = "your-password"; // 创建ClientContext(这是CSOM的核心入口,替代SPSite) using (ClientContext context = new ClientContext(siteUrl)) { // 设置凭据:SPO用SharePointOnlineCredentials,本地SP用默认凭据 SecureString securePassword = new SecureString(); foreach (char c in password.ToCharArray()) securePassword.AppendChar(c); context.Credentials = new SharePointOnlineCredentials(userName, securePassword); // 本地SharePoint请注释上面两行,用这个: // context.Credentials = CredentialCache.DefaultCredentials; // 获取目标文件夹(比如"文档"库下的"待下载"子文件夹) List docsList = context.Web.Lists.GetByTitle("Documents"); Folder targetFolder = docsList.RootFolder.Folders.GetByUrl("待下载"); // 替换成你的文件夹路径 // 加载文件夹的文件集合 context.Load(targetFolder, f => f.Files); context.ExecuteQuery(); // 遍历所有文件,只下载.xlsx格式的 foreach (Microsoft.SharePoint.Client.File file in targetFolder.Files) { if (file.Name.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase)) { // 从SharePoint获取文件流 FileInformation fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, file.ServerRelativeUrl); // 替换成你的本地保存路径 string localSavePath = Path.Combine(@"C:\本地保存目录", file.Name); // 写入本地文件 using (FileStream fs = new FileStream(localSavePath, FileMode.Create)) { fileInfo.Stream.CopyTo(fs); } } } }
2. 几个关键注意事项
- 如果是SSIS的Script Task,要确保运行环境安装了对应版本的CSOM组件,或者把CSOM的DLL设置为
Copy Local=True,打包到项目输出目录 - 权限一定要够:你的账号必须有目标文件夹的读取权限
- 要递归遍历子文件夹?那得写个递归方法,加载每个子文件夹的Files集合,重复上面的下载逻辑就行
三、如果还是识别不了组件?试试这些排查步骤
- 检查引用的DLL版本:CSOM版本要和你的SharePoint版本匹配(比如SP2016对应16.0.x,SPO用最新版)
- 在Script Task的“引用”面板里,确认已经添加了
Microsoft.SharePoint.Client.dll和Microsoft.SharePoint.Client.Runtime.dll - 清理项目缓存,重新编译脚本
内容的提问来源于stack exchange,提问作者Noelle
相关产品推荐
相关产品推荐

