Microsoft Graph API不返回共享工作表的表

时间:2017-10-07 13:45:14

标签: c# excel microsoft-graph

我的目标是在与我共享的在线Excel电子表格上阅读和编写内容。必须在WPF C#应用程序中使用Microsoft Graph API执行该操作。问题是我无法访问单个行,只能访问工作表名称以外的信息。

我可以通过以下调用获得正确的工作表:

GET https://graph.microsoft.com/v1.0/drives(DRIVE_ID)/items(ITEM_ID)/workbook/worksheets(WORKSHEET_ID)/

我得到以下回复:

 {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives(DRIVE_ID)/items(ITEM_ID)/workbook/worksheets/$entity",
"@odata.id": "/drives(DRIVE_ID)/items(ITEM_ID)/workbook/worksheets(%27%7B00000000-0001-0000-0500-000000000000%7D%27)",
"id": "{00000000-0001-0000-0500-000000000000}",
"name": "Daniel",
"position": 5,
"visibility": "Visible"
}

这是正确的。但是,如果我追加/tables,我会收到以下回复

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives(DRIVE_ID)/items(ITEM_ID)/workbook/worksheets('%7B00000000-0001-0000-0500-000000000000%7D')/tables",
"value": []
}

这是不正确的,因为工作表有内容,并且没有表引用,我无法使用/tables('0')/Rows查询访问表的行。

我使用的用户具有对工作表的读/写权限(我可以使用浏览器更改工作表)。在应用程序上,我请求所有安全范围,即使我已经读过,只需要“files.read”和“files.readwrite”。令牌被正确授予,我可以从文件,驱动器和工作簿中读取大量信息,但表格和行除外。

我可以使用浏览器编辑的URL基于SharePoint。 https://COMPANY_NAME.sharepoint.com/...

有什么建议吗?

更新2017-10-08

因此,您可以在请求

时检查我所做的请求是否正确
GET https://graph.microsoft.com/v1.0/drives/DRIVE_ID/items/ITEM_ID/workbook/worksheets

我明白了

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets",
"value": [{
    "@odata.id": "/drives('DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0000-000000000000}",
    "name": "N0",
    "position": 0,
    "visibility": "Hidden"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0100-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0100-000000000000}",
    "name": "N1",
    "position": 1,
    "visibility": "Hidden"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0200-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0200-000000000000}",
    "name": "N2",
    "position": 2,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0300-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0300-000000000000}",
    "name": "N3",
    "position": 3,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0400-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0400-000000000000}",
    "name": "N4",
    "position": 4,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0500-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0500-000000000000}",
    "name": "Daniel",
    "position": 5,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0600-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0600-000000000000}",
    "name": "N6",
    "position": 6,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0700-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0700-000000000000}",
    "name": "N7",
    "position": 7,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0800-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0800-000000000000}",
    "name": "N8",
    "position": 8,
    "visibility": "Visible"
},
{
    "@odata.id": "/drives('b%DRIVE_ID')/items('ITEM_ID')/workbook/worksheets(%27%7B00000000-0001-0000-0900-000000000000%7D%27)",
    "id": "{00000000-0001-0000-0900-000000000000}",
    "name": "N9",
    "position": 9,
    "visibility": "Visible"
}]
}

此外,在尝试时

GET https://graph.microsoft.com/v1.0/drives/DRIVE_ID/items/ITEM_ID/workbook/worksheets/00000000-0001-0000-0500-000000000000

然后回复是:

{
  "error": {
    "code": "ItemNotFound",
    "message": "The requested resource doesn't exist.",
    "innerError": {
      "request-id": "GUID",
      "date": "2017-10-08T07:00:0"
    }
  }
}

最后,我在创建身份验证令牌时请求以下范围:“user.read”,“files.read.all”,“files.read”,“files.read.selected”,“files.readwrite”, “files.readwrite.all”,“files.readwrite.selected”,“sites.read.all”,“sites.readwrite.all”

3 个答案:

答案 0 :(得分:0)

您能确认工作表有table吗?表格是工作表的特定元素,与数据范围同义。

要获取工作表的单元格值,您可以获取used range。这将为您提供对工作表中包含任何已修改单元格(具有格式和/或值的单元格)的范围的引用。然后,您可以根据需要操作范围。

要解决第二个问题,在查询工作表时收到ItemNotFound错误:我相信您的查询未使用正确的工作表ID。 ids的格式为{<guid>},您要查询/<guid>,而不是/{<guid>}

尝试: GET https://graph.microsoft.com/v1.0/drives/DRIVE_ID/items/ITEM_ID/workbook/worksheets/{00000000-0001-0000-0500-000000000000}

取代: GET https://graph.microsoft.com/v1.0/drives/DRIVE_ID/items/ITEM_ID/workbook/worksheets/00000000-0001-0000-0500-000000000000

答案 1 :(得分:0)

除了dpim的回复之外,我还要先说明文件是否有任何表格。如果没有涉及表,您可以使用method signature对象直接与数据交互。

对于范围写入操作,请检查range API。这要求您知道您正在处理的地址。

对于阅读,您可以使用GET /workbook/names/{name}/range或者如果您知道该范围的名称(命名项),您可以使用 {{1}}。如果您不知道地址或名称,可以使用range update来获取包含数据的所有单元格。

答案 2 :(得分:0)

我发现了同样的问题。该问题似乎是由于我是在桌面Excel应用程序中创建表而不是在浏览器中创建的。

要修复此问题,我打开了桌面Excel应用程序并删除了所有表格。然后,我在线返回Excel并创建了表格。它们被命名为Table1,Table2等,并且无法在Excel在线中重命名它们-这是已知的,有记载的缺陷。

然后,Graph Explorer可以找到并列出表格。

为了娱乐,我随后重新打开了桌面应用程序中的工作表,并按自己的喜好将其重命名为Table1,Table2 ...,并且Graph Explorer仍可以使用它们的新名称来找到它们。

已修复。