如何在 Asp.Net Core 實現 Excel 導出功能

在web應用程序開發時,或許你會遇到這樣的需求,如何在 Asp.Net Core 中實現 excel 或者 word 的導入導出,在 NuGet 上有大量的工具包能夠實現這樣的功能,本篇就討論下如何使用 ClosedXML 實現 Excel 數據導出。html

安裝 ClosedXML

若是想實現 Excel 的導出功能,在 Asp.Net Core 中有不少的dll能夠作到,其中的一個叫作 ClosedXML,你能夠經過可視化界面 NuGet package manager 去安裝,也能夠使用命令行 NuGet package manager console 執行下面命令。git

Install-Package ClosedXML

將數據導出成 CSV 文件

將數據導成 CSV 文件是很是簡單的,畢竟每行數據都是用 , 隔開便可,能夠用 NuGet 上的 CsvExport 或者 AWright18.SimpleCSVExporter 去實現,固然你以爲本身很 🐂👃,能夠親自操刀實現,下面我準備親自實現一下,先看下面定義的 Author 類。github

public class Author
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

而後塞一些數據到 authors 列表中,以下代碼所示:web

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

定義一個 DownloadCommaSeperatedFile 方法,用於實現 Action 的 csv 導出功能。app

public IActionResult DownloadCommaSeperatedFile()
{
    try
    {
       StringBuilder stringBuilder = new StringBuilder();
       stringBuilder.AppendLine("Id,FirstName,LastName");
       foreach (var author in authors)
       {
           stringBuilder.AppendLine($"{author.Id},
           {author.FirstName},{author.LastName}");
       }
      return File(Encoding.UTF8.GetBytes
      (stringBuilder.ToString()), "text/csv", "authors.csv");
    }
    catch
    {
       return Error();
    }
}

將數據導出成 XLSX 文件

Excel 中的 workbook 是由若干個 worksheet 組成,下面的代碼可用來生成一個 workbook。工具

var workbook = new XLWorkbook();

接下來生成一個 worksheet,而後在 worksheet 中填一些數據,代碼以下:ui

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

最後,將 workbook 轉成 內存流 (memory stream) 再經過 Controller.Action 的 FileContentResult 返回給客戶端,代碼以下:命令行

using (var stream = new MemoryStream())
{
     workbook.SaveAs(stream);
     var content = stream.ToArray();
     return File(content, contentType, fileName);
}

下載 Excel

下面是導出 Excel 全部的業務邏輯代碼,這個 Action 實現了 Excel 導出功能。excel

public IActionResult DownloadExcelDocument()
        {
            string contentType = "application/vnd.openxmlformats-
            officedocument.spreadsheetml.sheet";
            string fileName = "authors.xlsx";
            try
            {
                using (var workbook = new XLWorkbook())
                {
                    IXLWorksheet worksheet =
                    workbook.Worksheets.Add("Authors");
                    worksheet.Cell(1, 1).Value = "Id";
                    worksheet.Cell(1, 2).Value = "FirstName";
                    worksheet.Cell(1, 3).Value = "LastName";
                    for (int index = 1; index <= authors.Count; index++)
                    {
                        worksheet.Cell(index + 1, 1).Value =
                        authors[index - 1].Id;
                        worksheet.Cell(index + 1, 2).Value =
                        authors[index - 1].FirstName;
                        worksheet.Cell(index + 1, 3).Value =
                        authors[index - 1].LastName;
                    }
                    using (var stream = new MemoryStream())
                    {
                        workbook.SaveAs(stream);
                        var content = stream.ToArray();
                        return File(content, contentType, fileName);
                    }
                }
            }
            catch(Exception ex)
            {
                return Error();
            }
        }

這篇就是 ClosedXML 的全部內容,若是你想對 Excel 中的數據進行更加複雜的操控,能夠使用 EPPlus 或者 NPOI,關於 ClosedXML 的更多內容,可參考:https://github.com/ClosedXML/...code

譯文連接: https://www.infoworld.com/art...
相關文章
相關標籤/搜索