どうやって?Net CoreによるExcelエクスポート機能の実現

4963 ワード

Webアプリケーションの開発では、Aspでどのようにするかというニーズに直面するかもしれません.Net Coreではexcelまたはwordのインポート・エクスポートが実現されており、NuGetではこのような機能を実現するためのツール・パッケージが多数存在するため、本編ではClosedXMLを用いてExcelデータのエクスポートを実現する方法について議論する.

ClosedXMLのインストール


Excelのエクスポート機能を実現したい場合は、Asp.Net Coreには多くのdllがあり、そのうちの1つはClosedXMLと呼ばれ、ビジュアル化インタフェースNuGet package managerでインストールしたり、コマンドラインNuGet package manager consoleを使用して次のコマンドを実行したりすることができます.

Install-Package ClosedXML

データをCSVファイルにエクスポート


データをCSVファイルに導くのは非常に簡単で、結局各行のデータは,で区切ることができて、NuGetの上のCsvExportあるいはAWright 18を使うことができます.SimpleCSVExporterは実現して、もちろんあなたは自分がとても、自分で刀を操って実現することができると思って、次に私は自分で実現するつもりで、まず以下の定義のAuthor類を見ます.

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

次にauthorsリストにデータをいくつか入力します.次のコードで示します.

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

Actionのcsvエクスポート機能を実現するためのDownloadCommaSeperatedFileメソッドを定義します.

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();

次にワークシートを生成し、ワークシートにデータを入力します.コードは次のとおりです.

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エクスポート機能を実現しています.

        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/...を参照してください.
翻訳リンク:
https://www.infoworld.com/art...