• 使用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软件包的经验。

  • 相关阅读:
    近段时间学习html和CSS的一些细碎总结
    循环队列
    【IOS】IOS高速入门之OC语法
    2014华为机试-字符串替换
    自己动手写操作系统--个人实践
    HBase学习(十四)LINUX下用Eclipse构建HBase开发环境
    IOS成长之路-Nsstring中搜索方法rangeOfString
    Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败
    java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
    十二.200多万元得到的创业教训--app名字是关键
  • 原文地址:https://www.cnblogs.com/bisslot/p/12679065.html
Copyright © 2020-2023  润新知