使用来自iFormFile的流创建新的ExcelPackage不起作用

时间:2019-06-20 02:13:25

标签: epplus

我正在尝试通过上载IFormFile使用EPPlus创建ExcelPackage。听起来真的很简单,我发现的所有样本都在做我正在做的事情,但是我的似乎不起作用。

我正在使用.NET Core,并且已经验证了该文件存在并且正确创建了流。我使用的是同一个文件的ClosedXml,它正确创建了XLWorksheet,因此我知道流是正确的。问题是,当我尝试在以下代码中设置工作表时,package.Workbook.Worksheets包含零个条目。换句话说,package.Workbook.Worksheets.Count =0。有人可以告诉我我缺少什么吗?就像我说的那样,我到过互联网,每个人都说这应该有效,但是似乎对我却不起作用。

谢谢

public IActionResult UploadExcel([FromForm]IFormFile file)
{
    var stream = file.OpenReadStream();
    using (ExcelPackage package = new ExcelPackage(stream))
    {
        var worksheet = package.Workbook.Worksheets[0];
    }
}

我希望package.Workbook.Worksheets包含1个工作表,其中包含传入的excel文件中的数据。我没有收到任何错误,只是没有工作表。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但通过将[0]替换为FirstOrDefault()来解决了。另外,不确定是否重要,但是我在示例中使用了MemoryStream。希望这对遇到这张票的人有所帮助:

[HttpPost]
public async Task<IActionResult> UploadFile([FromForm] IFormFile file, CancellationToken cancellationToken)
{
    if (file == null || file.Length <= 0)
        return BadRequest("File is empty");

    if (!Path.GetExtension(file.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
        return BadRequest("File extension is not supported");

    using (var stream = new MemoryStream())
    {
        await file.CopyToAsync(stream, cancellationToken);
        using (var package = new ExcelPackage(stream))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.FirstOrDefault();
            var rowCount = worksheet.Dimension.Rows;
        }
    }

    return Ok($"{file.FileName} Uploaded");
}