Ошибка при редактировании xlsx с использованием Syncfusion.XlsIO.UWP и Microsoft Graph - PullRequest
0 голосов
/ 20 октября 2019

Я попытался отредактировать файл в Ondrive через Microsoft Graph, загрузив его для редактирования, а затем снова загрузив.

В разделе загрузки xlsx я столкнулся с этой ошибкой при помещении переменной «stream» в IWorkbook.

"System.ArgumentException: 'Update mode requires a stream with read, write, and seek capabilities.'"
ExcelEngine excelEngine = new ExcelEngine();
IApplication application = excelEngine.Excel;         
application.UseFastRecordParsing = true;
var stream = await graphClient.Me.Drive.Items["F90FCCBAC810EFDB!41667"].Content
                                                                       .Request()
                                                                       .GetAsync();
IWorkbook workbook = await application.Workbooks.OpenAsync(stream);

И в разделе загрузки я попытался загрузить файл из средства выбора файлов в IWorkbook, затем сохранить его в виде потока, наконец успешно загрузил, но он был пустым.

using (ExcelEngine excelEngine = new ExcelEngine())
            {
                FileOpenPicker openPicker = new FileOpenPicker();
                openPicker.SuggestedStartLocation = PickerLocationId.Desktop;
                openPicker.FileTypeFilter.Add(".xlsx");
                openPicker.FileTypeFilter.Add(".xls");
                StorageFile inputStorageFile = await openPicker.PickSingleFileAsync();
                Stream fileStream = (await inputStorageFile.OpenReadAsync()).AsStreamForRead();
                IWorkbook workbook = await excelEngine.Excel.Workbooks.OpenAsync(fileStream);
                workbook.Version = ExcelVersion.Excel2016;
                MemoryStream outputStream = new MemoryStream();
                await workbook.SaveAsAsync(outputStream);
                await graphClient.Me.Drive.Root.ItemWithPath(inputStorageFile.Name).Content
                .Request()
                .PutAsync<DriveItem>(outputStream);
            }

Мне нужно отредактировать файл xlsx на Ondrive, используя Syncfusion.XlsIO.UWP из потока. Может кто-нибудь помочь мне? Большое спасибо.

1 Ответ

1 голос
/ 24 октября 2019

Привет от Syncfusion.

Мы попытались воспроизвести упомянутые проблемы и нашли решение для их устранения. Подробности см. Ниже.

Запрос-1: «System.ArgumentException:« Режим обновления требует потока с возможностями чтения, записи и поиска. »Для этого кода ниже.

Ответ: Мы просим вас скопировать поток в MemoryStream и установить stream.Postion = 0;перед загрузкой файла в IWorkbook для решения проблемы.

ExcelEngine excelEngine = new ExcelEngine();
IApplication application = excelEngine.Excel;
application.UseFastRecordParsing = true;

var stream = await graphClient.Me.Drive.Root.ItemWithPath("Sample.xlsx").Content.Request().GetAsync();
stream.Position = 0;

MemoryStream file = new MemoryStream();
stream.CopyTo(file);
file.Position = 0;

IWorkbook workbook = await application.Workbooks.OpenAsync(file);

Запрос-2: Я попытался загрузить файл успешно, но он был пустым.

Ответ: Мы просим вас также установить здесь позицию потока равной 0, прежде чем загружать файл для решения проблемы.

outputStream.Position = 0;
await graphClient.Me.Drive.Root.ItemWithPath("Sample.xlsx").Content.Request().PutAsync<DriveItem>(outputStream);

Образец, который мы попробовали с нашей стороны, можно загрузить сследующая ссылка.

Пример ссылки: https://www.syncfusion.com/downloads/support/forum/148443/ze/03-add-msgraph1181232979.zip

Примечание: Пожалуйста, добавьте ApplicationID и используйте правильное имя файла, затем выполнитеобразец.

С уважением,

Keerthi.

...