当需要从 ASP.NET Core 导出数据到 Excel 时,有几个不同的选项。 如果您需要简单的表格数据,那么生成一个 CSV 文件就足够了。 如果您需要嵌入颜色和公式,您将需要更高级的东西。 让我们从简单的开始。
对于本文中的示例,我将使用带有一些硬编码数据的ASP.NET Core控制器。 在实际的应用程序中,这些数据将来自用户输入,数据库或类似的数据:
1 public classHomeController : Controller2 {3 private List users = new List
4 {5 new User { Id = 1, Username = "DoloresAbernathy"},6 new User { Id = 2, Username = "MaeveMillay"},7 new User { Id = 3, Username = "BernardLowe"},8 new User { Id = 4, Username = "ManInBlack"}9 };10
11 publicHomeController()12 {13 }14 }
导出为CSV
导出数据的最简单方法是作为逗号分隔值(CSV)文件。 有可用的NuGet软件包可以帮助您解决此问题,但对于本文,我将手动创建CSV:
1 publicIActionResult Csv()2 {3 var builder = newStringBuilder();4 builder.AppendLine("Id,Username");5 foreach (var user inusers)6 {7 builder.AppendLine($"{user.Id},{user.Username}");8 }9
10 return File(Encoding.UTF8.GetBytes(builder.ToString()), "text/csv", "users.csv");11 }
使用System.Text命名空间中可用的StringBuilder类,我在第一行中添加标题,然后为每个用户添加一行。 最后,我使用ASP.NET Core中提供的File helper返回生成的CSV。 通过将内容作为文件返回,浏览器将自动将内容下载为名为users.csv的CSV文件。
导出为XLSX
如果您要导出的文件比简单的表格数据复杂得多,则需要将数据导出为真实的Excel文件。 CSV文件不能包含颜色,公式等。
由于 XLSX 文件是基于 XML 的,您可以自己生成内容。 我不建议这样做,因为格式很复杂,而且有很多好的 NuGet 包可用。 过去我一直在使用 ClosedXML 包,我很高兴看到这个包仍然在开发和支持中。 Net Core. 我还研究了 EPPlus 和 DocumentFormat 等替代软件包。 来自 Microsoft 的 OpenXml,但是它们都没有提供 ClosedXML (IMO)这样简单的 API。
要使用ClosedXML生成XLSX文件,请先安装以下NuGet软件包:
Install-Package ClosedXML
然后添加一个新的控制器操作。 对于这篇文章,为了保持一致性,我已经像 CSV 例子中那样格式化了输出。 Closedxml 提供了一组丰富的特性,包括颜色、计算等等。 查看他们的文档了解更多细节。 下面是代码:
1 publicIActionResult Excel()2 {3 using (var workbook = newXLWorkbook())4 {5 var worksheet = workbook.Worksheets.Add("Users");6 var currentRow = 1;7 worksheet.Cell(currentRow, 1).Value = "Id";8 worksheet.Cell(currentRow, 2).Value = "Username";9 foreach (var user inusers)10 {11 currentRow++;12 worksheet.Cell(currentRow, 1).Value =user.Id;13 worksheet.Cell(currentRow, 2).Value =user.Username;14 }15
16 using (var stream = newMemoryStream())17 {18 workbook.SaveAs(stream);19 var content =stream.ToArray();20
21 returnFile(22 content,23 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",24 "users.xlsx");25 }26 }27 }
我们来看看代码。 为了创建 Excel 文档,我正在创建一个新的 XLWorkbook。 在第5行中,我创建了一个名为 Users 的新工作表,您可以看到 ClosedXML 的好处。 Excel 工作表不能使用 CSV 文件。
与前面的示例一样,我添加了一个标题行,并将用户列表中的值放入以下行中。 这个 API 不需要太多的介绍,因为它非常容易理解。 使用工作表对象引用行和单元格。
最后,我将工作簿导出到流中,并将其作为文件从控制器返回。
事实证明,将数据从ASP.NET Core导出到Excel非常简单。 根据输出文件的要求,可以选择CSV或XLSX。 由于ClosedXML是我的首选框架,因此我很想听听您使用优质Excel软件包的经验。