[.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,之前小弟在實做此功能時都會用下列兩種方式 :
- 使用 GridView : 將要匯出的資料塞到GridView,在修改輸出網頁的ContentType為Excel,範例請點這裡阿阿
- 使用 NPOI : Open source的第三方套件,提供快速讀/寫 excel, word, ppt…等檔案,NPOI官網
但是,某天同事K告訴我轉Excel有更好用的方法
	EPPlus 看完官網說明後覺得易上手且功能強大,立馬開始抄襲同事source code實作 
決定發文紀錄這好用匯出Excel library.
概述
- 源自 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
Step 2 : NuGet安裝成功後,可以在參考裡看到EPPlus
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程式碼
以上只是簡單的Sample,EPPlus還有很多強大的功能
如報表圖形…Chart圖表的功能
後續如果有機會實作在分享嚕
謝謝
參考
比NPOI更討喜的Excel元件-EPPlus!


