[.NET] EPPlus - 匯出/入 Excel好幫手

[.NET] EPPlus - 匯出Excel好幫手
在開發系統時,常會遇到需求者希望將查詢出來的資料轉成Excel,之前小弟在實做此功能時都會用下列兩種方式 :
1. GridView : 將要匯出的資料塞到GridView,在修改輸出網頁的ContentType為Excel,範例請點這裡阿阿
2. NPOI : Open source的第三方套件,提供快速讀/寫 excel, word, ppt…等檔案,NPOI官網
但是,某天同事K告訴我轉Excel有更好用的方法
EPPlus 看完官網說明後覺得易上手且功能強大,立馬開始抄襲同事source code實作
決定發文紀錄這好用匯出Excel library.

前言

在開發系統時,常會遇到需求者希望將查詢出來的資料轉成Excel,之前小弟在實做此功能時都會用下列兩種方式 :

  1. 使用 GridView : 將要匯出的資料塞到GridView,在修改輸出網頁的ContentType為Excel,範例請點這裡阿阿
  2. 使用 NPOI : Open source的第三方套件,提供快速讀/寫 excel, word, ppt…等檔案NPOI官網

但是,某天同事K告訴我轉Excel有更好用的方法

EPPlus 看完官網說明後覺得易上手且功能強大,立馬開始抄襲同事source code實作

決定發文紀錄這好用匯出Excel library.

 

概述

EPPlus - EPPlus is a .net library that reads and writes Excel 2007/2010 files using the Open Office Xml format (xlsx).

 

  • 源自 ExcelPackage,使用Open Office Xml格式
  • 2009年Release,最新版本為 4.0.4
  • Excel基本功能,可透過此library自行定義Excel中 worksheet, Columns, Cells, Pictures, formatting calculation物件及相關style設定,範例 Content sheet
  • 支援 Statistic功能,可畫出Excel中的統計圖表及數據圖,範例 Statistics sheet

缺點: 不支援2007之前的版本,使用前請先確認使用者端的Office版本

更多說明文件及Sample Code請參考 EPPlus官網

 

使用說明

Step 1 : 首先,使用NuGet管理套件安裝EPPlus

image

Step 2 : NuGet安裝成功後,可以在參考裡看到EPPlus

image

Step 3 : 先在程式最上方加上using OfficeOpenXml,並撰寫相關Excel程式碼

(範例是使用ASP.NETMVC, 在Controller寫相關邏輯,最後回傳File格式)


/// <summary>
        /// Create DataTable
        /// </summary>
        /// <returns></returns>
        private DataTable GetDataTable()
        {
            DataTable dt = new DataTable();

            for (int i = 0; i < 5; i++)
            {
                dt.Columns.Add("Col_" + i.ToString());
            }

            for (int i = 0; i <= 5; i++)
            {
                DataRow dr = dt.NewRow();
                
                dr[0] = i.ToString();
                dr[1] = string.Format("This is No.{0}", i.ToString());
                dr[2] = string.Format("Note:{0}", i.ToString());
                dr[3] = i.ToString();

                dt.Rows.Add(dr);
            }

            return dt; 
        }
        /// <summary>
        /// Export Excel File
        /// </summary>
        /// <returns></returns>
        public ActionResult Export()
        {
            using (ExcelPackage package = new ExcelPackage())
            {
                // 新增worksheet
                ExcelWorksheet ws = package.Workbook.Worksheets.Add("Sample");

                // 取得Sample DataTable資料
                DataTable dt = GetDataTable();

                // 將DataTable資料塞到sheet中
                ws.Cells["A1"].LoadFromDataTable(dt, true);

                // 設定Excel Header 樣式
                using (ExcelRange rng = ws.Cells["A1:E1"])
                {
                    rng.Style.Font.Bold = true;
                    rng.Style.Fill.PatternType = ExcelFillStyle.Solid;                      
                    rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189)); 
                    rng.Style.Font.Color.SetColor(Color.White);
                }

                var stream = new MemoryStream();
                package.SaveAs(stream);

                string fileName = "myfilename.xlsx";
                string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

                stream.Position = 0;
                return File(stream, contentType, fileName);
            }

Step 4 : 匯出Excel先在程式最上方加上using OfficeOpenXml,並撰寫相關Excel程式碼

image

以上只是簡單的Sample,EPPlus還有很多強大的功能

如報表圖形…Chart圖表的功能

後續如果有機會實作在分享嚕

謝謝

 

參考

比NPOI更討喜的Excel元件-EPPlus!

epplus.codeplex.com