我的目标是在与我共享的在线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”
答案 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仍可以使用它们的新名称来找到它们。
已修复。