【发布时间】:2021-03-02 04:38:15
【问题描述】:
我正在尝试使用 MS Graph 来解析 excel 文件的内容并将数据与其他业务线应用程序同步。我遇到的问题实际上是在 excel 中获取数据。
我正在使用ClientCredentialProvider 对 Azure AD 应用注册进行身份验证,该注册具有完全控制和读取。我的租户中的所有权限来创建我的GraphServiceClient,并且可以通过 ID 成功查询站点,甚至可以查看文档我正在尝试访问的库,但 Items 空了。见下文
var result = _graphService.Client
.Sites["my-site-id"] // This works
.Drives["site-drive-id"] // This works to find the document library
//.Lists["list-id-corresponding-to-folder"] // This also works to find that folder
.Items // ****This is null****
.Request()
.GetAsync()
.Result;
我尝试使用 Lists 属性(如上所述),因为据我了解,SharePoint 中的文档库实际上只是列表,但 Items 枚举再次没有产生任何结果。
我在 Microsoft 网站上找不到有关此用例的文档,并且我注意到使用 MS Graph Explorer 返回的对象没有“items”字段(或Microsoft.Graph.Site 类中的许多属性),但我认为有 some 方法可以填充此字段,因为它是在 Microsoft.Graph 命名空间中实现的。不确定我是否缺少一些权限步骤或什么,但如果我可以使用 FullControl 访问该网站,我应该能够访问其所有内容...
我不能使用Client.Me(个人驱动器)作为源位置,因为1)应用程序没有在我的权限下运行,2)需要读取多个文件;这个想法只是提供所需的站点/驱动器/项目 ID 并获取文件。
我还有其他方法可以解决这个问题吗?
【问题讨论】:
-
要获取文档库中的文件列表,您需要使用
/drives/{drive-id}/root/children,直接使用项目不会给您文件列表。获取文档列表后,从中获取 Excel 文件的 id 并使用/drives/{drive-id}/Items/{itemid} -
这行得通,在使用 /sites/{id} 找到驱动器 ID 后,我能够删除路径的“站点”部分,这使事情变得更干净,然后直接驱动你建议。谢谢。
标签: c# excel microsoft-graph-api sharepoint-online microsoft-graph-sdks