Thứ Hai, 29 tháng 8, 2016

XML với MS. Excel – Giới thiệu về POI và chuyển đổi từ XML thành Excel và ngược lại

XML với MS. Excel – Giới thiệu về POI và chuyển đổi từ XML thành Excel và ngược lại

Tác giả: Nguyễn Quốc Bảo

Mục đích: Chủ đề của bài này giới thiệu tổng quát về Apache POI. Qua đó, chúng tôi cũng sẽ áp dụng POI để thực hiện chuyển đổi từ XML thành Excel và ngược lại

XML với MS. Excel – Giới thiệu về POI và chuyển đổi từ XML thành Excel và ngược lại

Tác giả: Nguyễn Quốc Bảo

Mục đích: Chủ đề của bài này giới thiệu tổng quát về Apache POI. Qua đó, chúng tôi cũng sẽ áp dụng POI để thực hiện chuyển đổi từ XML thành Excel và ngược lại

Yêu cầu về kiến thức cơ bản

Tổng quan Apache POI

·         Apache POI là dự án mã nguồn mở, nằm trong dự án Jakarta do Apache Software Foundation bảo trợ.

·         POI cung cấp các thư viện nhằm giúp tương tác với các định dạng file của Microsoft Office như Word, Excel, PowerPoint, … trên ngôn ngữ Java.

·         Hiện tại, phiên bản POI v3.9 bao gồm các thành phần sau

    • HSSF & XSSF APIs: làm việc với file Excel, trong đó
      • HSSF (Horrible SpreadSheet Format): đọc, ghi file Microsoft Excel (.xls)
      • XSSF (XML SpreadSheet Format): đọc, ghi file Office Open XML (.xlsx)
    • HWPF (Horrible Word Processor Format) APIs: đọc, ghi file Microsoft Word 97 (.doc)
    • HSLF (Horrible Slide Layout Format) APIs: đọc, ghi file Microsoft PowerPoint (.ppt)
    • Ngoài ra còn 1 số APIs để làm việc với các thành phần khác của Microsoft Office như Outlook (HSMF), Visio (HDGF), Publisher (HPBF)…

·         Trong bài viết này, chúng tôi sẽ hướng dẫn cách chuyển đổi qua lại giữa file XML và XLS sử dụng HSSF APIs của thư viện Apache POI phiên bản 3.9 (download tại đây)

  • Một số kiến thức có liên quan

    • Với file xls ví dụ như hình trên,
      • Mỗi cột Year hay cột A, B, C … giống như 1 record
      • Mỗi dòng dữ liệu sẽ là 1 field.
      • Khi chuyển từ table này sang xml thì mỗi field sẽ là 1 element. Nghĩa là chúng ta cần 1 node để chứa các element này. Khi đã có được các node, chúng ta cần phải chỉ định root cho nó để đảm bảo cấu trúc của tài liệu xml well-formed. Do xml có cấu trúc dạng cây phân cấp, mỗi khi tạo ra element và gán trị cho nó chúng ta phải chỉ định ParentNode của element đó.
    • Để chuyển đổi từ xls sang xml, chúng ta cần phải biết được số cột chứa có giá trị trong file xls đó (nghĩa là dữ liệu có nghĩa mà chúng ta cần parse để chuyển đổi) vì POI-HSSF chỉ hỗ trợ duyệt file xls theo row và cell
    • Để chuyển đổi từ xml sang xls, chúng ta cần biết số field của mỗi record tức là số element trong 1 node. Ngoài ra, trong mỗi element của tài liệu xml nên có thêm cái attribute tên là description chứa mô tả của element đó. (Nếu không có cũng không sao vì khi xuất ra file xls sẽ không được định dạng.

Áp dụng POI để chuyển đổi một tài liệu cụ thể từ XML thành Excel và ngược lại

  • Bước 1: chúng ta thực hiện tạo Java Application project với tên POI Demo như sau


  • Bước 2: Thực hiện giải nén gói jar của apache POI đã down về

  • Bước 3: add thư viện vào project đang làm
    • Trong của sổ Netbeans, click chuột phải vào Libraries và chọn Add JAR/Folder…

    • Add thư viện vào project

  • Bước 4: tạo main class tên là XMLToExcel để thực hiện viết code chuyển đổi từ XML thành Excel

  • Bước 5: tạo tài liệu XML tên IncomeStatements.xml như sau

  • Bước 6: Chúng ta sẽ parse file XML trên để lấy dữ liệu ra, sau đó ghi vào file Excel thông qua POI HSSF APIs
    • Đầu tiên, chúng ta tạo ra 1 phương thức tên là generateExcel với các tham số truyền vào như bên dưới, trong đó
      • xmlDocument: file xml
      • tagsName: danh sách tên các tag trong file xml ở trên
      • description: danh sách các header trong file excel sẽ tạo ra.
    • Kế tiếp chúng ta sẽ tiến hành theo trình tự như sau
      • Tạo workbook mới.
      • Tạo 1 worksheet mới trên workbook chỉnh độ rộng cho nó.
      • Parse file XML để lấy ra các node.

    • Duyệt node để lấy ra các giá trị trong từng node, ghi mới vào cell và row. Lưu ý ở đây, cột đầu tiên trong file excel được tạo ra sẽ là header

      • Lưu ý: Dòng số 46 cho biết giá trị được ghi vào cell là dạng số. Nếu không khai báo dòng này, mặc định trị ghi vào sẽ là dạng chuỗi
    • Xuất ra file Excel

    • Trong hàm main, chúng ta khai báo như sau

  • Bước 7: Chạy để xem kết quả

  • Bước 8: Chúng ta tiếp tục tạo mới 1 main class thứ 2, đặt tên là Excel2XML để thực hiện chuyển đổi từ Excel thành XML
    • Thực hiện tạo ra 1 phương thức tên là generateXML với các tham số
      • excelFile: input file.
      • rootElementName: tên root element của file xml.
      • nodeElementName: tên element tương ứng với mỗi record.
      • elementsName: danh sách tên các element trong 1 record.
      • colSize: số cột có chứa giá trị trong file excel
    • Tiếp theo, chúng tiến hành từng bước như dưới đây
      • Tạo file xml bằng DocumentBuilder và tạo root element

      • Tạo HSSF object từ file Excel

      • Lấy dữ liệu và đổ sang XML document

      • Xuất ra dạng XML

    • Cập nhật chỉnh sửa cho hàm main

  • Bước 9: chạy và cho ra kết quả

Chúc mừng các bạn đã hoàn tất và sử dụng Apache POI để sử dụng chuyển đổi từ XML thành Excel và ngược lại. Bài viết trên, chúng tôi có tham khảo từ ebook “Pro XML Development with JavaTM Technology”. Bài viết của chúng tôi hướng tới việc tiếp cận của quý vị đến việc áp dụng XML để làm trung gian và chuyển đổi dữ liệu trong quá trình xây dựng ứng dụng. Qua bài viết trên, hy vọng quí vị có thể áp dụng vào cụ thể ứng dụng và cách giải quyết vấn đề thực tế của quý vị.

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở các chủ đề khác liên quan đến XML

Không có nhận xét nào:

Đăng nhận xét