当需要从 ASP.NET Core 导出数据到 Excel 时,有几个不同的选项。 如果您需要简单的表格数据,那么生成一个 CSV 文件就足够了。 如果您需要嵌入颜色和公式,您将需要更高级的东西。 让我们从简单的开始。
对于本文中的示例,我将使用带有一些硬编码数据的ASP.NET Core控制器。 在实际的应用程序中,这些数据将来自用户输入,数据库或类似的数据:
1 public class HomeController : Controller 2 { 3 private Listusers = 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 public HomeController() 12 { 13 } 14 }
导出为CSV
导出数据的最简单方法是作为逗号分隔值(CSV)文件。 有可用的NuGet软件包可以帮助您解决此问题,但对于本文,我将手动创建CSV:
1 public IActionResult Csv() 2 { 3 var builder = new StringBuilder(); 4 builder.AppendLine("Id,Username"); 5 foreach (var user in users) 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 public IActionResult Excel() 2 { 3 using (var workbook = new XLWorkbook()) 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 in users) 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 = new MemoryStream()) 17 { 18 workbook.SaveAs(stream); 19 var content = stream.ToArray(); 20 21 return File( 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软件包的经验。