Изменение содержимого файла Excel в Sharepoint Online - PullRequest
0 голосов
/ 07 мая 2020

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

Что я задумал: я использую клиентскую объектную модель Sharepoint ( CSOM ) для изменения содержимого файла Excel, хранящегося в Sharepoint Online. Поскольку значения некоторых ячеек необходимо обновить, я обратился к EPPlus , чтобы помочь с частью доступа к данным.

Аутентификация в Sharepoint Online и чтение данных из Excel файл работает нормально. Проблема в том, что вы пытаетесь сохранить изменения. Код ниже:

OfficeDevPnP.Core.AuthenticationManager authManager = new OfficeDevPnP.Core.AuthenticationManager();
var context = authManager.GetWebLoginClientContext("https://tenant.sharepoint.com");
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, "/Shared Documents/myFile.xlsx");
using (var memoryStream = new MemoryStream())
{
              fileInfo.Stream.CopyTo(memoryStream);
              using (var p = new ExcelPackage(memoryStream))
              {
                    var ws = p.Workbook.Worksheets["Sheet1"];
                    ws.Cells[1, 1].Value = "newValue";
                    p.Save();
                    Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, "/Shared Documents/myFile.xlsx", memoryStream, true);
              }
}

MemoryStream необходимо использовать, поскольку EPPlus плохо работает с FileInfo.Stream, и попытка создать новый ExcelPackage на основе такого потока приводит к System.NotSupportedException: 'This stream does not support seek operations.'.

Вернемся к проблеме: при запуске приведенного выше кода метод SaveBinaryDirect выдает The remote server returned an error: (409) Conflict, несмотря на явный четвертый параметр, указывающий ему перезаписать существующий файл.

Попытка сохранение в альтернативный файл (например, myFile2.aspx) будет успешным, однако получившийся документ всегда поврежден.

Я пытаюсь понять, что я здесь делаю не так. В качестве альтернативы, если другой подход, включающий CSOM, будет работать лучше, любые подсказки будут весьма признательны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...