Bạn đã biết xuất EXCEL hàng triệu row vô cùng đơn giản trong lập trình?

Trong lập trình phần mềm, Báo cáo và Kết xuất dữ liệu ra file để lưu trữ hoặc import vào các hệ thống khác là một trong những tính năng vô cùng quan trọng, đặc biệt là với những phần mềm phục vụ khách hàng B2B.

Các file kết xuất dữ liệu thường sẽ có một số định dạng như sau:

– PDF: bản in

– Word: Văn bản

– CSV, Excel: dữ liệu có cấu trúc và từng dòng

Trong bài viết này, chúng tôi sẽ đề cập tới định dạng phổ biến nhất, đó là: CSV, Excel.

CSV có cấu trúc đơn giản, dễ dàng sinh ra, import vào các hệ thống khác cũng dễ dàng, tuy nhiên đối với người dùng thông thường thì khá khó khăn trong việc hiển thị được vì nó là text đơn thuần.

Excel có cấu trúc phức tạp, phải thông qua API (POI, jxcel) để sinh ra, import vào các hệ thống khác không dễ dàng, nhưng bù lại đối với người dùng thông thường thì quá đơn giản vì máy tính nào cũng có Microsoft Office.

Có một cách rất hay có thể xuất Excel đơn giản như CSV mà không cần thông qua API, bạn có tò mò muốn biết? Hãy thực hiện theo từng bước chúng tôi hướng dẫn dưới đây nhé và nhớ ĐỪNG BỎ SÓT!

Trước hết, muốn ghi ra Excel chúng ta cùng phân tích một chút cấu trúc, định dạng file Microsoft Excel. Excel có 2 định dạng:

  • 2003 trở về trước (*.xls), quá cũ, chúng ta sẽ không cần quan tâm.
  • Từ 2007 trở về sau (*.xlsx): theo chuẩn OOXML (Office Open XML), tham khảo: https://en.wikipedia.org/wiki/Office_Open_XML

Office Open XML (also informally known as OOXML or Microsoft Open XML (MOX)[3]) is a zipped, XML-based file format developed by Microsoft[4] for representing spreadsheets, charts, presentations and word processing documents. The format was initially standardized by Ecma (as ECMA-376), and by the ISO and IEC (as ISO/IEC 29500) in later versions.

Đọc thì dài như vậy, nhưng thực chất nó chỉ là file zip thôi, vậy file trong zip nó có gì? Để ngâm cứu mớ tài liệu kia thì hơi mất thời gian, chúng ta cùng thực hành luôn thôi nhé.

Tạo một file excel OOXML nào:

Mở nó bằng Microsoft Office và type vài từ:

Để chắc chắn, hãy save lại rồi tắt đi, sau đó mở WinRAR và open nó trong WinRAR:

Và chúng ta được gì? Vào theo đường dẫn xl\worksheets\ và mở file sheet1.xml xem nhé:

Bạn đã nhìn thấy rồi phải không, dữ liệu được lưu dưới dạng text. Thử sửa một chút vào file sheet1.xml nhé, ở cái dòng bôi đậm trên kia, chúng ta sửa <v>1</v> thành <v>2</v>, đơn giản bằng cách kéo file sheet1.xml ra ngoài sửa rồi kéo nó vào lại thôi.

Tắt WinRAR vào mở lại bằng Microsoft Office nào:

Hiển nhiên là chúng ta mở được bình thường và A2 đã là 2 chứ không phải 1 nữa.

Như vậy nguyên lý đã rõ, việc export Excel rất đơn giản bằng cách ghi ra file xml và zip nó lại mà không phải dùng thư viện cồng kềnh phức tạp. Cách thức này có một ưu điểm rất hay, giống như định dạng file CSV, dữ liệu được stream về client, client không phải chờ server tạo ra Excel rồi mới nhận được.

Giờ đây, là một lập trình viên, bạn đã thực sự tự tin khi được yêu cầu xuất Excel hàng triệu row chưa?

Note: Còn một chú ý, chúng tôi muốn nhấn mạnh, ở trên, chúng ta đã thử sửa dữ liệu kiểu số, còn dữ liệu kiểu chuỗi, ngày tháng, có vẻ khó có thể làm theo cách đó được, còn góc khuất đâu đó. Nhưng bạn đừng quá lo, đọc code cũng sẽ hiểu hết thôi. (Source code: https://github.com/thewind81/excelutil)

Nếu bạn có câu hỏi nào liên quan đến chủ đề trong bài viết này, đừng ngần ngại, hãy liên hệ với đội ngũ chuyên gia của Hyperlogy. Chúng tôi sẵn sàng hỗ trợ và luôn có các chương trình thực tập dành cho các bạn sinh viên, cũng như cơ hội làm việc cho các bạn đam mê lập trình, muốn làm trong các dự án lớn.

Thân chào và hẹn gặp lại ở các bài chia sẻ tiếp theo!

(Bài viết được trích từ bài chia sẻ của Mr. Hồ Hữu Trọng – Kiến trúc sư phần mềm – Công ty Hyperlogy)