ClosedXMLを使ってASP.NET MVCでExcel(xlsx)出力

Excelのファイルを出力するライブラリのClosedXMLを使って、xlsx(Open XML形式)を出力してみます。

ASP.NET MVC プロジェクトを新規で作って、パッケージのインストール。

Install-Package ClosedXML

タイトル、ヘッダ、明細と枠をつけてそれっぽい感じのExcelを作成

        public ActionResult Test()
        {
            var people = new List<Person>
            {
                new Person { Name = "佐藤", Age = 20, Address = "東京都"},
                new Person { Name = "鈴木", Age = 21, Address = "千葉県"},
                new Person { Name = "高橋", Age = 22, Address = "埼玉県"}
            };

            byte[] fileContents;

            var wb = new XLWorkbook();
            var ws = wb.Worksheets.Add("Address book");

            // タイトル
            ws.Cell("A1").SetValue("アドレス帳");

            // ヘッダ
            var header = ws.Range("A2:C2");
            header.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
            header.Style.Font.Bold = true;
            header.Style.Fill.BackgroundColor = XLColor.LightGray;
            ws.Cell("A2").SetValue("名前");
            ws.Cell("B2").SetValue("年齢");
            ws.Cell("C2").SetValue("住所");

            // 明細
           foreach (var person in people.Select((value, index) => new { value, index }))
            {
                var row = person.index + 3;
                ws.Cell(row, 1).SetValue(person.value.Name);
                ws.Cell(row, 2).SetValue(person.value.Age);
                ws.Cell(row, 3).SetValue(person.value.Address);
            }

            // 枠線
            var table = ws.Range(ws.Cell(2, 1), ws.Cell(people.Count + 2, 3));
            table.Style.Border.OutsideBorder = XLBorderStyleValues.Thick;

            using (var stream = new MemoryStream())
            {
                wb.SaveAs(stream);
                fileContents = stream.ToArray();
                stream.Close();
            }

            return File(fileContents,
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                "sample.xlsx");
        }

モデル

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Address { get; set; }
    }

 

出来ました。

20160726

Comments are closed.

Post Navigation