更新范围请求返回200 OK,但不更新Excel工作表

时间:2019-03-28 07:50:40

标签: excel microsoft-graph

我无法更新Excel工作表中的一些单元格。 PATCH请求通过了,一切看起来都很好,但是当我打开文档时,它没有更新。

excel文件托管在SharePoint中,而不是OneDrive中。

我正在通过Graph explorer使用Microsoft Graph,并且可以读取相关单元格:

/v1.0/drives/{id}/list/items/{id}/driveItem/workbook/worksheets/{id}/range(address='B2:B3')

写入请求返回成功,但未进行任何更改

PATCH https://graph.microsoft.com/v1.0/drives/{id}/list/items/{id}/driveItem/workbook/worksheets/{id}/range(address='B2:B3')

{
  "values": [["foo bar"], ["hello world"]]
}

响应(200 OK)(省略了一些敏感字段,为简洁起见,省略了一些内容

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#workbookRange",
  "@odata.type": "#microsoft.graph.workbookRange",
  "columnCount": 1,
  "cellCount": 2,
  "columnHidden": false,
  "rowHidden": false,
  "numberFormat": [["General"], ["General"]],
  "columnIndex": 1,
  "text": [["foo bar"], ["hello world"]],
  "hidden": false,
  "rowCount": 2,
  "rowIndex": 1,
  "valueTypes": [["String"], ["String"]],
  "values": [["foo bar"], ["hello world"]]
}

这是我期望的响应,但是当我打开Excel文档时,单元格不会更新。

我也尝试使用workbook-session,但无济于事

  1. 通过

    创建会话
    http
    POST https://graph.microsoft.com/v1.0/drives/{id}/list/items/{id}/driveItem/workbook/createSession
    
    {
      "persistChanges": true
    }
    
  2. 复制workbook-session-id。整个过程-太疯狂了!

  3. workbook-session-id标头添加到上一个PATCH请求并发送。
  4. 通过POST https://graph.microsoft.com/v1.0/drives/{drive-id}/list/items/{item-id}/driveItem/workbook/closeSession
  5. 关闭会话
  6. 检查文档,但未更改

我还发现文档有些误导。 Update Range doc中说

  

可选请求标头

     

Workbook-Session-Id (工作簿会话ID),用于确定更改是否持久化。可选。

建议如果不使用更改,则不会保存。但是session docs

  

注意:不需要会话标题即可使用Excel API。   但是,我们建议您使用会话标头来改进   性能。如果您不使用会话标头,则在   API调用 保留在文件中。

那为什么不坚持呢?

1 个答案:

答案 0 :(得分:1)

所以问题在于Excel文件具有宏。

该调用适用于没有宏的.xlsm文件。令人遗憾的是,该文件是带有宏的.xlsm文件。