Как прочитать файл Excel (.XLS и .XLSX) в C #? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь прочитать файл Excel в C # .net ядро ​​2.2. Для чтения Excel я использую EpPlus . Я взял ссылку из Загрузка файлов в ASP.NET Core . У меня Api вот так

 public async Task<ActionResult<ReappropiationAccountViewModel>> Post(IFormFile file)
 {
        return Ok(await Mediator.Send(new SaveReappropriationAccountCommand { ReappropiationAccountFile = file }));
 }

И моя команда такая

public class SaveReappropriationAccountCommand : IRequest<ReappropiationAccountViewModel>
{
    public IFormFile ReappropiationAccountFile { get; set; }
}

И в моем обработчике я пытаюсь читать Excel вот так

        using (var memoryStream = new MemoryStream())
        {
            await request.ReappropiationAccountFile.CopyToAsync(memoryStream);

            using (ExcelPackage package = new ExcelPackage(memoryStream))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets[0];

                int rowCount = worksheet.Dimension.End.Row;
                int colCount = worksheet.Dimension.End.Column;

                for (int row = 1; row <= rowCount; row++)
                {
                    for (int col = 1; col <= colCount; col++)
                    {
                        var rowValue = worksheet.Cells[row, col].Value;
                    }
                }

            }
        }

Но я не смог прочитать загруженный Excel, так как он добавляет InvalidDataException в строку using (ExcelPackage package = new ExcelPackage(memoryStream)).

Сообщение об исключении:

InvalidDataException: файл не является допустимым файлом пакета. Если файл зашифрован, укажите пароль в конструкторе.

Все кажется абсолютно правильным, но не смог прочитать данные Excel. Попытка прочитать этот файл Excel:

enter image description here

Мой вопрос: где я ошибаюсь?

1 Ответ

0 голосов
/ 12 июня 2019

Вам необходимо вернуть поток памяти в начало после его записи и перед передачей в ExcelPackage для чтения:

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