【问题标题】:Using MS Graph to Read Excel Contents Through Sharepoint使用 MS Graph 通过 Sharepoint 读取 Excel 内容
【发布时间】: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


【解决方案1】:

@broccoli_rob,

MS Graph 没有公开枚举驱动器中所有项目的功能。相反,您只能list childrenget item by id

我们建议您使用/drive/root:/{item-path} 来获取文件夹中的项目。您可以在 Graph explorer 中使端点生效:

BR

【讨论】:

  • 看起来我困惑的根源是期望/items 端点返回结果而不提供ID;我需要枚举这些项目以找到项目 ID,/children 端点使我能够做到这一点。不幸的是,Graph SDK 中不存在 Children 字段,因此您必须先使用资源管理器查找项目 ID。您发布的第二个链接帮助我获得了所需的 ID,因此我将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2017-10-11
  • 2020-03-20
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多