Trong các bài viết trước chúng ta đã được làm quen và tìm hiểu về Ext.Net, cũng như cách sử dụng control của nó, cụ thể là GridPanel, đa số các ứng dụng web liên quan đến báo cáo hiện nay đề hổ trợ chức năng kết xuất excel, người dùng xem danh sách dữ liệu từ lưới và xuất ra file excel từ lưới đó.
Thay vì phải cài đặt và sử dụng Com build-in của Office Excel, trong bài blog post này mình sẽ export ra file excel không Com interop, mình sẽ sử dụng 1 third party tên là Epplus. Lợi ích của việc sử dụng thư viện này quan trọng nhất và trước tiên nhất là không phải bị phụ thuộc vào *.dll của MS Office, chúng ta có thể distribute trên các server cũng như share hosting khác nhau mà không cần phải cài bộ MS Office, mặc lợi điểm khác của sử dụng Epplus là đơn giản, nhanh, dễ dàng customize theo ý đồ của mình (Open Source).
Chúng ta bắt đầu:
- Để cho dễ dàng và nhanh chóng mình sẽ sử dụng lại source code từ bài: Sử dụng control Ext.Net GridPanel và phân trang với Entity Framework
- Thư viện download Epplus có thể tham khảo tại: Create advanced Excel 2007/2010 spreadsheets on the server
Thay đổi giao diện:
- Bằng cách thêm 1 button Export trên header của danh sách customers

<TopBar>
<ext:Toolbar ID="Toolbar1" runat="server">
<Items>
<ext:Button ID="btnExport" runat="server" Text="Export" Icon="Disk">
<DirectEvents>
<Click OnEvent="ExportExcel_Click" Method="POST" Type="Submit">
<EventMask Msg="Exporting..." ShowMask="true"></EventMask>
</Click>
</DirectEvents>
</ext:Button>
</Items>
</ext:Toolbar>
</TopBar>
Rất đơn giản không cần phải giải thích nhiều, chúng ta chỉ cần chú ý đến thuộc OnEvent trong tag Click và truyền vào đó tên hàm (server code) để execute.
Note: chúng ta cũng có thể truyền vào client code (Javascript function)
Giờ đến lượt xem bên trong hàm ExportExcel_Click như thế nào:
protected void ExportExcel_Click(object sender, DirectEventArgs e)
{
using (ExcelPackage pck = new ExcelPackage())
{
var wsList = pck.Workbook.Worksheets.Add("Nortwind Customers");
using (NorthwindEntities entities = new NorthwindEntities())
{
var customers = entities.Customers.Select(s => new
{
s.CustomerID,
s.CompanyName,
s.ContactName,
s.Address,
s.City,
s.Phone,
s.Fax,
s.Region
});
wsList.Cells["A1"].LoadFromCollection(customers, true, TableStyles.Medium9);
}
var fi = new FileInfo(@"\excelExport.xlsx");
if (fi.Exists)
{
fi.Delete();
}
pck.SaveAs(fi);
}
}
Giải thích: để đảm báo cho object ExcelPackage được release (giải phóng resource) mình đã bọc (wrap) “nó” và block using.
using (NorthwindEntities entities = new NorthwindEntities()):Tạo 1 sheet mới cho Workbook có tên là “Northwind Customer”.
Lấy danh sách customers bao gồm: CustomerID, CompanyName, ContactName, Address, City, Phone, Fax và Region.
Epplus cho phép chúng ta export từ 1 list qua hàm LoadFromCollection và truyền vào đó 1 list, cụ thể ở đây là customers.
Chúng Tạo 1 file excel tên excelExxport.xlsx (xóa nó nếu đã tồn tại).
Here we go: Press F5 để xe kết quả:
Chúc Thành Công!