Lưu trữ

Archive for Tháng Bảy, 2012

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.

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