使用C# CSOM 读取 O365 Share Point Online 中的文档库,一级文件夹,二级文件夹...
最近有个项目,背景是读取 SPO 中文档库中的文件夹中的 EXCLE和CSV 文件 ,有个问题是需要循环遍历每层的文件夹并取里面的EXCLE和CSV文件,然后将里面的内容同步到SQL SERVER数据库中。
由于项目原因部署的程序也不是内网,所以使用CSOM方式读取文件并取数据
关于读取SPO中的文档库以及文件夹的部分Code:
第一种方式:
这种方式只能取文档库的第一层文件夹
List list = web.Lists.GetByTitle(Doc_DDMARLT_Name); clientContext.Load(list); clientContext.ExecuteQuery(); clientContext.Load(list.RootFolder); clientContext.Load(list.RootFolder.Folders); clientContext.ExecuteQuery(); List<Model_Folder> _listFolder = new List<Model_Folder>(); foreach (Folder SubFolder_1 in list.RootFolder.Folders) { if (SubFolder_1.Name.Equals(Doc_DDMARLT_Name_subFolder_CSV)) { Model_Folder Model_Folder = new Model_Folder(); Model_Folder.FolderName = SubFolder_1.Name; string _url_SubFolder_2 = SubFolder_1.Name; _listFolder.Add(Model_Folder); } }
第二种方式:
/// <summary> /// 读取CSV中数据 /// </summary> /// <param name="clientContext"></param> /// <param name="Doc_DDMARLT_Name">文档库的名称</param> /// <param name="Doc_DDMARLT_Name_subFolder_CSV">子文件夹的名称</param> protected static void readCsv_data(Web web, ClientContext clientContext, string Doc_DDMARLT_Name, string Doc_DDMARLT_Name_subFolder_CSV) { List list = web.Lists.GetByTitle(Doc_DDMARLT_Name); clientContext.Load(list); clientContext.ExecuteQuery(); clientContext.Load(list.RootFolder); clientContext.Load(list.RootFolder.Folders); clientContext.ExecuteQuery(); List<Model_Folder> _listFolder = new List<Model_Folder>(); foreach (Folder SubFolder_1 in list.RootFolder.Folders) { if (SubFolder_1.Name.Equals(Doc_DDMARLT_Name_subFolder_CSV)) { Model_Folder Model_Folder = new Model_Folder(); Model_Folder.FolderName = SubFolder_1.Name; string _url_SubFolder_2 = SubFolder_1.Name; //取子文件夹 var folderUrl = Doc_DDMARLT_Name_subFolder_CSV + "/" + _url_SubFolder_2; var folder = clientContext.Web.GetFolderByServerRelativeUrl(folderUrl); clientContext.Load(folder); clientContext.ExecuteQuery(); var folders = folder.Folders; clientContext.Load(folders); clientContext.ExecuteQuery(); foreach (var _folders in folders) { // do your thing } _listFolder.Add(Model_Folder); } } }
如果多层的话可封装一个方法调用。
我的小鱼你醒了,
还认识早晨吗?
昨夜你曾经说,
愿夜幕永不开启。
初吻吻别的那个季节,
不是已经哭过了吗?
你的香腮边轻轻滑落的,
是你的泪,还是我的泪。
我的指尖还记忆著,
你慌乱的心跳。
温润的体香里,
那一缕长髮飘飘。
——青青树 《魁拔》
交流群:ASP.NET交流群(2群) 58189568
ExtJs4.2交流群(3群)97869295
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决