ASP.NET Core 3.0 教程:如何导出数据到 Excel?

构建Web应用程序时,通常将需要从Word或Excel文档中导入或导出数据。 有多种方法可以实现此目的,并且有很多NuGet软件包可与Word或Excel一起使用。 本文讨论了如何在ASP.NET Core中使用ClosedXML将数据导出到Excel。

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019 。

在Visual Studio中创建一个ASP.NET Core MVC项目

首先,让我们在Visual Studio 2019中创建一个ASP.NET Core项目。假设系统中安装了Visual Studio 2019,请按照下面概述的步骤在Visual Studio中创建一个新的ASP.NET Core项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在“配置新项目”窗口中,指定新项目的名称和位置。
  6. (可选)选中“将解决方案和项目放在同一目录中”复选框。
  7. 单击创建。
  8. 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将使用ASP.NET Core 3.0。
  9. 选择“ Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。
  10. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  11. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  12. 单击创建。

按照这些步骤应该在Visual Studio中创建一个新的ASP.NET Core MVC项目。 我们将在以下部分中使用该项目来说明导出Excel数据的方法。

安装ClosedXML NuGet包

如果要将数据导出到Excel,有多个库可供选择。 其中之一名为ClosedXML。 您可以通过Visual Studio 2019 IDE中的NuGet软件包管理器来安装此软件包,也可以通过在NuGet软件包管理器控制台中执行以下命令来安装此软件包:

Install-Package ClosedXML

从ASP.NET Core 3.0将数据导出为CSV文件

将数据导出为逗号分隔(CSV)文件很简单。 您可以利用NuGet包(例如CsvExport或AWright18.SimpleCSVExporter)来实现此目的,也可以手动执行。 为了简单起见,我们将手动生成CSV文件。 考虑以下名为Author的类。

  1.  
    public class Author
  2.  
    {
  3.  
      public int Id { get; set; }
  4.  
      public string FirstName { get; set; }
  5.  
      public string LastName { get; set; }
  6.  
    }

接下来,您可以将数据填充到作者列表中,如下面给出的代码片段所示。

  1.  
    List<Author> authors = new List<Author>
  2.  
    {
  3.  
        new Author { Id = 1, FirstName = "Joydip", LastName = "Kanjilal" },
  4.  
        new Author { Id = 2, FirstName = "Steve", LastName = "Smith" },
  5.  
        new Author { Id = 3, FirstName = "Anand", LastName = "Narayaswamy"}
  6.  
    };

以下代码段显示了如何在控制器的操作方法中生成CSV文件。

  1.  
    public IActionResult DownloadCommaSeperatedFile()
  2.  
    {
  3.  
        try
  4.  
        {
  5.  
           StringBuilder stringBuilder = new StringBuilder();
  6.  
           stringBuilder.AppendLine("Id,FirstName,LastName");
  7.  
           foreach (var author in authors)
  8.  
           {
  9.  
               stringBuilder.AppendLine($"{author.Id},
  10.  
               {author.FirstName},{author.LastName}");
  11.  
           }
  12.  
          return File(Encoding.UTF8.GetBytes
  13.  
          (stringBuilder.ToString()), "text/csv", "authors.csv");
  14.  
        }
  15.  
        catch
  16.  
        {
  17.  
           return Error();
  18.  
        }
  19.  
    }

在ASP.NET Core 3.0中将数据导出为XLSX文件

Excel中的工作簿由几个工作表组成。 您可以使用以下代码创建Excel工作簿。

var workbook = new XLWorkbook();

然后,您可以利用IXLWorkSheet界面来创建工作表并将其添加到工作簿中,如下所示。

  1.  
    IXLWorksheet worksheet = workbook.Worksheets.Add("Authors");
  2.  
    worksheet.Cell(1, 1).Value = "Id";
  3.  
    worksheet.Cell(1, 2).Value = "FirstName";
  4.  
    worksheet.Cell(1, 3).Value = "LastName";
  5.  
    for (int index = 1; index <= authors.Count; index++)
  6.  
    {
  7.  
       worksheet.Cell(index + 1, 1).Value = authors[index - 1].Id;
  8.  
       worksheet.Cell(index + 1, 2).Value = authors[index - 1].FirstName;
  9.  
       worksheet.Cell(index + 1, 3).Value = authors[index - 1].LastName;
  10.  
    }

最后,您可以将工作簿另存为内存流,然后创建FileContentResult实例,如下所示。

  1.  
    using (var stream = new MemoryStream())
  2.  
    {
  3.  
         workbook.SaveAs(stream);
  4.  
         var content = stream.ToArray();
  5.  
         return File(content, contentType, fileName);
  6.  
    }

在ASP.NET Core 3.0中下载Excel文档

这是可用于下载Excel文档的action方法的完整源代码。

  1.  
    public IActionResult DownloadExcelDocument()
  2.  
            {
  3.  
                string contentType = "application/vnd.openxmlformats-
  4.  
                officedocument.spreadsheetml.sheet";
  5.  
                string fileName = "authors.xlsx";
  6.  
                try
  7.  
                {
  8.  
                    using (var workbook = new XLWorkbook())
  9.  
                    {
  10.  
                        IXLWorksheet worksheet =
  11.  
                        workbook.Worksheets.Add("Authors");
  12.  
                        worksheet.Cell(1, 1).Value = "Id";
  13.  
                        worksheet.Cell(1, 2).Value = "FirstName";
  14.  
                        worksheet.Cell(1, 3).Value = "LastName";
  15.  
                        for (int index = 1; index <= authors.Count; index++)
  16.  
                        {
  17.  
                            worksheet.Cell(index + 1, 1).Value =
  18.  
                            authors[index - 1].Id;
  19.  
                            worksheet.Cell(index + 1, 2).Value =
  20.  
                            authors[index - 1].FirstName;
  21.  
                            worksheet.Cell(index + 1, 3).Value =
  22.  
                            authors[index - 1].LastName;
  23.  
                        }
  24.  
                        using (var stream = new MemoryStream())
  25.  
                        {
  26.  
                            workbook.SaveAs(stream);
  27.  
                            var content = stream.ToArray();
  28.  
                            return File(content, contentType, fileName);
  29.  
                        }
  30.  
                    }
  31.  
                }
  32.  
                catch(Exception ex)
  33.  
                {
  34.  
                    return Error();
  35.  
                }
  36.  
            }

尽管我们在本文中使用了ClosedXML,但还有其他几个用于在ASP.NET Core中读取,写入和操作Excel数据的程序包,包括EPPlus和NPOI。 您可以在https://github.com/ClosedXML/ClosedXML上了解有关GitHub的ClosedXML的更多信息。 我将在以后的文章中讨论在ASP.NET Core应用程序中导入Excel数据。

如何在ASP.NET和ASP.NET Core中执行更多操作:

 

From: https://www.infoworld.com/article/3538413/how-to-export-data-to-excel-in-aspnet-core-30.html

posted @ 2021-03-18 09:36  dreamw  阅读(702)  评论(0编辑  收藏  举报