[.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!