Запрос на обновление диапазона возвращает 200 ОК, но не обновляет таблицу Excel

#excel #microsoft-graph-api

#excel #microsoft-graph-api

Вопрос:

У меня возникли проблемы с обновлением нескольких ячеек внутри листа Excel. PATCH Запрос проходит нормально, и все выглядит нормально, но когда я открываю документ, он не обновляется.

Файл Excel размещен в SharePoint, а не в OneDrive.

Я использую Microsoft Graph через Graph Explorer и могу прочитать соответствующие ячейки:

 /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 ОК) (опущено несколько чувствительных полей и еще несколько для краткости)

 {
  "@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. Проверьте документ, но он не изменился

Я также нахожу документацию немного вводящей в заблуждение. В документе Диапазон обновления говорится

Необязательные заголовки запроса

Идентификатор сеанса рабочей книги, который определяет, сохраняются изменения или нет. Необязательно.

Предполагая, что если изменения не используются, они не сохраняются. Однако в документах сеанса говорится

Примечание: Заголовок сеанса не требуется для работы API Excel. Тем не менее, мы рекомендуем вам использовать заголовок сеанса для повышения производительности. Если вы не используете заголовок сеанса, изменения, внесенные во время вызова API, сохраняются в файле.

Так почему это не сохраняется?

Ответ №1:

Итак, проблема заключалась в том, что в файле Excel был макрос.

Вызов работает для .xlsm файлов, у которых нет макросов. К сожалению, рассматриваемый файл был .xlsm файлом с макросами.