使用ASP.NET Core将数据导出到Excel

 

 

当需要从 ASP.NET Core 导出数据到 Excel 时,有几个不同的选项。 如果您需要简单的表格数据,那么生成一个 CSV 文件就足够了。 如果您需要嵌入颜色和公式,您将需要更高级的东西。 让我们从简单的开始。

对于本文中的示例,我将使用带有一些硬编码数据的ASP.NET Core控制器。 在实际的应用程序中,这些数据将来自用户输入,数据库或类似的数据:

 

 1 public class HomeController : Controller
 2 {
 3     private List<User> users = new List<User>
 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软件包的经验。

 

posted @ 2020-04-11 13:07  TonysDad  阅读(2140)  评论(0编辑  收藏  举报