ASP.Net Core 2.0 で Excel にエクスポート

それを達成する方法はたくさんあります。

オプション 1:wwwroot に保存

Excel を生成して wwwroot に保存できます。 フォルダ。その後、ページ上で静的コンテンツとして提供できます。

たとえば、wwwroot 内に「temp」というフォルダーがあります。 新しく生成されたすべての Excel を含むフォルダ。

<a href="\temp\development\user1\2018\5\9\excel1.xlsx" download>Download</a>

このアプローチには制限があります。そのうちの 1 つは新しい download です 属性。最新のブラウザでのみ動作します。

オプション 2:バイト配列

もう 1 つの方法は、Excel を生成し、それをバイト配列に変換して、コントローラーに送り返すことです。そのために、.Net Core 2.0 をサポートする「EPPlus」(v:4.5.1) というライブラリを使用します。

以下は、アイデアを提供するためにまとめたサンプルコードです。本番環境には対応していません。

using OfficeOpenXml;
using OfficeOpenXml.Style;

namespace DL.SO.Web.UI.Controllers
{
    public class ExcelController : Controller
    {
        public IActionResult Download()
        {
            byte[] fileContents;

            using (var package = new ExcelPackage())
            {
                var worksheet = package.Workbook.Worksheets.Add("Sheet1");

                // Put whatever you want here in the sheet
                // For example, for cell on row1 col1
                worksheet.Cells[1, 1].Value = "Long text";

                worksheet.Cells[1, 1].Style.Font.Size = 12;
                worksheet.Cells[1, 1].Style.Font.Bold = true;

                worksheet.Cells[1, 1].Style.Border.Top.Style = ExcelBorderStyle.Hair;

                // So many things you can try but you got the idea.

                // Finally when you're done, export it to byte array.
                fileContents = package.GetAsByteArray();
            }

            if (fileContents == null || fileContents.Length == 0)
            {
                return NotFound();
            }

            return File(
                fileContents: fileContents,
                contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                fileDownloadName: "test.xlsx"
            );
        }
    }
}

David Liang の回答に同意します。

DataTable 全体をエクスポートする場合は、スライドを変更してください。

            string export="export";
            DataTable dt = new DataTable();
            //Fill datatable
            dt = *something*

            byte[] fileContents;
            using (var package = new ExcelPackage())
            {
                var worksheet = package.Workbook.Worksheets.Add(export);
                worksheet.Cells["A1"].LoadFromDataTable(dt, true);
                fileContents = package.GetAsByteArray();
            }
            if (fileContents == null || fileContents.Length == 0)
            {
                return NotFound();
            }
            return File(
                fileContents: fileContents,
                contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                fileDownloadName: export + ".xlsx"
            );