访问Excel工作簿时出现“找不到资源”的错误提示。

3
我想连接到Microsoft Graph API,并与我在OneDrive上的一个小Excel工作簿进行交互。
我已成功通过Graph API授权并连接到OneDrive,查询了我的个人OneDrive内容,甚至可以找到.xlsx工作簿并获取其ID。对此端点的GET请求是成功的:
https://graph.microsoft.com/v1.0/me/drive/recent

对于上述的GET请求的响应包含以下信息(部分数据已省略):

{createdDateTime: "2017-12-13T04:24:57Z", lastModifiedDateTime: "2017-12-13T04:26:09Z"}
id:"{id}"
name:"transactions.xlsx"

然而,通过图形API调用连接到此“transactions.xlsx”工作簿似乎在我的Web应用程序中有些困难。例如,在此处进行GET请求:

https://graph.microsoft.com/v1.0/me/drive/items/{id}/workbook/worksheets('Sheet1')/usedRange

通过Graph Explorer成功返回工作簿数据。但是,仅仅将该API调用复制粘贴到我的应用程序中就会失败,错误信息如下:

{
  "error": {
    "code": "itemNotFound",
    "message": "The resource could not be found.",
    "innerError": {
      "request-id": "7716493f-cc32-413e-b4fa-5855df7ad181",
      "date": "2017-12-13T14:54:43"
    }
  }
}

我对Graph API调用有什么不理解的地方,导致我的OneDrive查询可以通过,而Excel查询则声称“未找到项目”?请注意这是一个商业Microsoft Graph/O365帐户。

你是如何获取访问令牌的?你请求了哪些范围,使用了哪种OAUTH授权流程? - Marc LaFleur
我正在使用这个代码示例,我相信它通过Oauth 2.0进行连接 https://github.com/microsoftgraph/ruby-connect-rest-sample。不确定我请求了哪些范围 - 我可以进一步研究一下。 - Bryan Knouse
在您的应用程序中,普通文件 GET 操作(不是使用 /workbook 而是在 /items/{id} 上)是否有效?听起来文件本身没有解析。您能否尝试并更新结果? - Sudhi Ramamurthy
Sudhi,这些操作在图形浏览器上有效。在应用程序中尝试过,与上述问题引用的相同错误。 - Bryan Knouse
图形浏览器成功地获取了我账户的所有数据,包括 Excel 数据。 - Bryan Knouse
显示剩余3条评论
2个回答

0

你可以尝试使用Excel REST的入门项目之一,看看能否获得所需结果:https://github.com/microsoftgraph?utf8=%E2%9C%93&q=excelstarter


我用这个来启动 https://github.com/microsoftgraph/ruby-connect-rest-sample 。我将尝试你提供的其中一个,之后会回报结果。 - Bryan Knouse
我包含的链接是专门针对Excel的。它应该更符合你的情况。 - Sudhi Ramamurthy

0

你所显示的 GET /me/drive/recent 的响应相当有限。你的结果中是否有 remoteItem 的条目?

如果是这样,你需要使用不同的 URL 来获取 transaction.xlsx 文件。

GET /drives/{remoteItem-driveId}/items/{remoteItem-id}

来自:https://developer.microsoft.com/zh-cn/graph/docs/api-reference/v1.0/api/drive_recent#remarks

如果不是这种情况,您还可以使用以下请求来查找您的文件夹结构:

GET /me/drive/root/children

通过上述查询的结果,您可以使用它来检索文件夹的内容:

GET /me/drive/items/{item-id}/children

一旦您知道确切的位置,您可以使用以下方法检索您的工作簿:

GET /me/drive/root:/{item-path}

显然,如果你已经知道路径,你可以直接跳到最后一步 :-)


所有这些都可以使用图形浏览器工作,但有些在应用程序中无法工作。使用您的第一个建议中的结构/drives/{remoteItem-driveId}/items/{remoteItem-id},在我的应用程序中返回了一个itemNotFound结果。有趣的是,/me/drive/root/search(q='csv')?select=name,id,webUrl成功地从应用程序查询,而/me/drive/root/children则不行。 - Bryan Knouse
@BryanKnouse,在 GET /me/drive/recent 的响应中,是否有 remoteItem 的条目? - Liam
不,只是一个空的“错误”响应,非常类似于我问题中链接的内容。但是,这个调用在图形浏览器中是有效的。 - Bryan Knouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接