我正在尝试通过上载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文件中的数据。我没有收到任何错误,只是没有工作表。
答案 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");
}