上一篇文章我們聊到如何快速地匯入資料透過 ,EpplusTableColumn 裡面的 Header 來比對
並且還原成為 Staff 的物件 ,今天我們聊一下,如何簡單的,把 List<Staff> 直接輸出成 Excel 檔案
這樣就不用在那邊數格子..
簡單的說我有一堆資料 List<Staff> 並且我在 Class 中的 Property 中的 EpplusTableColumn Attribute 都有設定 Hedaer , Hidden, NumberFormat 等資訊
其實設定好輸出就很簡單
Staff.cs :
public class Staff
{
[EpplusTableColumn(Order = 1, Header = "員工編號")]
[Required]
public string Id { get; set; }
[Column(1)]
[EpplusTableColumn(Order = 2, Header = "姓名")]
public string Name { get; set; }
//日期的話要設定 NumberFormat 才會顯示正確
[EpplusTableColumn(Order = 3, Header = "到值日", NumberFormat = "yyyy/MM/dd")]
public DateTime Create { get; set; }
[EpplusTableColumn(Order = 4, Header = "電話")]
public string Mobile { get; set; }
[EpplusTableColumn(Order = 5, Header = "薪水")]
public decimal Salary { get; set; }
[EpplusTableColumn(Hidden =true)]
public string Memo { get; set; }
}
接下來就是輸出 Excel 檔案的程式碼
var staffs = new List
{
new Staff{ Id = "S1", Name="DONMA", Mobile="0912456789", Salary=999_999m, Create = new DateTime(1950, 3, 15) },
new Staff{Id = "S2", Name="JOHN", Mobile="0922456789", Salary=199_999m, Create = new DateTime(1962, 6, 10)},
new Staff{ Id = "S1", Name="DELTA", Mobile="0912456799", Salary=299_999m, Create = new DateTime(1971, 10, 2)}
};
ExportListDataToExcel(staffs, "SHEET1", AppDomain.CurrentDomain.BaseDirectory + "sample2.xlsx");
private static void ExportListDataToExcel(List data,string sheetName,string filePath)
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage(filePath))
{
// using the Actor class above
var sheet = package.Workbook.Worksheets.Add(sheetName);
sheet.Cells["A1"].LoadFromCollection(data,true);
package.Save();
}
}
Result:

有沒有異常的簡單,而且非常舒服不用在那邊數格子,如果有搞過輸出 Excel 一定知道我在說什麼