Lưu trữ

Posts Tagged ‘Excel’

Kết xuất dữ liệu ra excel (2)

Một trong những nhu cầu cơ bản nhất của người dùng khi cần kết xuất dữ liệu ra excel là xuất một dataset ra file excel, mỗi datatable tương ứng với một sheet chứa dữ liệu. Trong ví dụ ở phần trước về kết xuất định dạng XML Spreedsheet tôi cũng đưa project mẫu đáp ứng nhu cầu kết xuất này. Một nhu cầu khác cũng thường gặp trong các ứng dụng nghiệp vụ, đó là điền dữ liệu vào một template có sẵn (với định dạng có thể phức tạp).

Các thư viện nguồn mở, miễn phí được tìm hiểu sử dụng trong bài viết này đều là thư viện viết bằng .NET, nếu các bạn biết các thư viện bằng ngôn ngữ khác có thể chia sẻ tại đây.

2. Kết xuất định dạng BIFF8 (Excel 97-2003 file format)

Có hai thư viện hỗ trợ định dạng BIFF8 tôi đã thử nghiệm, khá gọn nhẹ. Đó là ExcelLibrary và NPOI.

  • ExcelLibrary:

Liên kết:

http://code.google.com/p/excellibrary/

http://www.codeproject.com/Articles/16210/Excel-Reader

Theo các tác giả (người Tung Của), thư viện này hiện đang hỗ trợ định dạng BIFF và có thể hỗ trợ .xlsx trong tương lai, nhưng nhìn vào commit changes thì có vẻ như hơn một năm nay thư viện không được sửa đổi gì cả. Vậy thì hoặc bạn nào có thể bổ sung hỗ trợ định dạng .xlsx, hoặc với xlsx thì ta tìm cái khác (như các thư viện tiếp sau tôi sẽ giới thiệu).

Sử dụng ExcelLibrary, việc kết xuất một dataset ra file excel cực kỳ thuận tiện:

ExcelLibrary.DataSetHelper.CreateWorkbook(“ExcelLibrary.xls”, ds);

Cách mở file, đọc cell, tạo workbook, duyệt sheet các bạn có thể xem trong bài báo trên Codeproject. Theo cá nhân tôi, thư viện này ưu điểm nhỏ gọn tốc độ, nhược điểm là chưa hỗ trợ về định dạng tài liệu (font, màu, …), và dường như tác giả đã quên nó.

  • NPOI

Liên kết:

http://npoi.codeplex.com/

http://code.google.com/p/npoi/

Đây là thư viện khá tốt và là ấn bản .NET của dự án trước đó viết trên nền java (http://poi.apache.org/).  Ưu điểm của NPOI (Copy-Paste):

a. It’s totally free to use

b. Cover most features of Excel (cell style, data format, formula and so on)

c. Profressionl support service (even 24*7) from NPOI team (not free)

d. Support xls, xlsx, docx.

e. Designed to be interface-oriented (take a look at NPOI.SS namespace)

f. Support not only export but also import

g. .Net 2.0 based even for xlsx and docx (though we also support .NET 4.0)

h. Successful cases from all over the world

i. huge amout of basic examples

 Một ưu điểm nữa là nó vẫn đang được phát triển. Nhược điểm là sử dụng hơi rườm rà.

Phiên bản từ 2.0 có hỗ trợ định dạng xlsx. Project mẫu tôi gửi ở đây có sử dụng phiên bản 1.2.5, trong đó tôi viết thêm lớp trung gian NPOISheet để sử dụng được dễ dàng hơn.

Phần sau: Các thư viện hỗ trợ xlsx.

Advertisements
Chuyên mục:Programming Thẻ:, ,

Kết xuất dữ liệu ra Excel (1)

Tháng Bảy 14, 2012 2 comments

Khi phát triển các phần mềm nghiệp vụ nói chung, sẽ có lúc bắt gặp yêu cầu kết xuất dữ liệu ra file excel để xử lý. Người dùng văn phòng rất ưa chuộng sự linh hoạt của phần mềm bảng tính phổ biến hàng đầu của Microsoft này. Các hãng thứ ba cũng thường có tính năng kết xuất dữ liệu ra một số định dạng phổ biến trong đó có excel.

Để làm được việc này, người phát triển có thể sử dụng thư viện của bộ office (Microsoft.Office.Interop.Excel.dll) để thao tác, ưu điểm là có thể tạo ra các file excel có định dạng phức tạp, nhược điểm là viết code cồng kềnh và khi triển khai cần cài đặt MS Office trên máy đích.
Tôi muốn chia sẻ ở bài này các cách khác nhau có thể kết xuất Excel mà hoàn toàn không sử dụng thư viện của Microsoft (do vậy khi deploy không yêu cầu môi trường phải cài đặt MS Office).
1. Kết xuất định dạng XML Spreadsheet

Nếu yêu cầu kết xuất excel chỉ đơn giản là đổ một datatable ra thành một sheet với các dòng dữ liệu tương ứng trong excel, thì cách sau đây là đơn giản nhất và chỉ cần sử dụng đọc ghi file text để xử lý. Ở đây tôi sử dụng C#2.0 để minh họa cho việc này.

Bước 1: Bạn tạo template, bằng cách tạo một file excel bình thường, có một sheet thể hiện dữ liệu của một bảng mẫu, nội dung và định dạng header theo ý bạn, chẳng hạn như hình vẽ.

Bước 2: Lưu file trên thành định dạng XML Spreadsheet 2003, chẳng hạn tên file là Book1.xml. Bạn có thể mở file này bằng notepad để thấy nội dung dạng xml của nó. Bây giờ bạn sẽ fill dữ liệu từ một datatable nào đó ra dạng XML spreadsheet theo template mà bạn tạo ra này. Dữ liệu các cell sẽ nằm trong cặp thẻ (“TableName” là tên của sheet)

<Worksheet ss:Name=”TableName”> </Worksheet>

Bước 3: Viết ứng dụng tạo ra file text có định dạng trên bằng cách thay các dữ liệu cell mẫu trong file Book1.xml bằng dữ liệu các cell đọc được từ Datatable.

Bạn có thể tải mã nguồn ứng dụng mẫu tôi viết tại đây, trong đó tôi sử dụng một file xml để làm dữ liệu input cho datatable, bạn có thể kết nối đến các DBMS để lấy dữ liệu theo ý muốn (để đơn giản tôi đã coi các trường dữ liệu đều là kiểu string).

Chú ý rằng định dạng XML Spreadsheet có nội dung dạng XML, không phải excel chuẩn. Ở các phần sau tôi sẽ giới thiệu các thư viện tôi đã thử nghiệm trong việc kết xuất dữ liệu ra xml, excel cấu trúc BIFF (Excel 2003 trở về trước), excel 2007 (xlsx). Hy vọng sẽ có ích cho các bạn khi tìm kiếm một giải pháp thay thế cho việc sử dụng thư viện của bộ MS Office.

Chuyên mục:Programming Thẻ:, ,