Xử Lý Dữ Liệu Microsoft Word Trong Java Với Apache POI

15:08 24-10-2017BKAP Media

Microsoft Word là một dạng tài liệu đã quá quen thuộc với chúng ta hàng ngày. Đôi khi trong các ứng dụng chúng ta cần làm các báo cáo dưới dạng word. Việc này sẽ dễ dàng được thực hiện với bộ thư viện Apache POI. Sau đây chúng ta sẽ đi qua các bước để tạo định dạng, sinh ra file và phân tích các file Word bằng ngôn ngữ lập trình Java.

Phần 1: Tạo file Word đơn giản

Bước 1: Tạo một Project trong NetBean và tạo một class “TaoFileWord.java” trong package demo

Bước 2: Add các gói thư viện sau vào project:

  • poi-ooxml-3.17.jar
  • poi-ooxml-schemas-3.17.jar
  • poi-3.17.jar
  • xmlbeans-2.6.0.jar

Cấu trúc Project sẽ như sau:

Bước 3: Thêm hàm main vào class TaoFileWord và sử dụng đối tượng của lớp “XWPFDocument” để ghi kết quả ra một file word, lần lượt theo các bước sau:

package demo;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.poi.xwpf.usermodel.ParagraphAlignment;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.poi.xwpf.usermodel.XWPFRun;

 

/**

 *

 * @author HAITHANH

 */

public class TaoFileWord {   

 

    public static void main(String[] args) {

        try {

            //Bước 1: Khởi tạo đối tượng để sinh ra file word

            XWPFDocument document = new XWPFDocument();

 

            //Bước 2: Tạo tiêu đề bài viết

            XWPFParagraph titleGraph = document.createParagraph();

            titleGraph.setAlignment(ParagraphAlignment.CENTER);

            String title = "TIỂU SỬ HỒ CHÍ MINH";

            XWPFRun titleRun = titleGraph.createRun();

            titleRun.setBold(true);

            titleRun.setText(title);

           

            //Bước 3: Tạo đoạn văn bản 1 trong tài liệu

            XWPFParagraph para1 = document.createParagraph();

            para1.setAlignment(ParagraphAlignment.BOTH);                

            String dataPara1 = "Hồ Chí Minh (19 tháng 5 năm 1890 – 2 tháng 9 năm 1969)";

            dataPara1 +=" tên khai sinh: Nguyễn Sinh Cung, là nhà cách mạng, người sáng";

            dataPara1 +=" lập Đảng Cộng sản Việt Nam, một trong những người đặt nền móng";

            dataPara1 +=" và lãnh đạo công cuộc đấu tranh giành độc lập, toàn vẹn lãnh thổ";

            dataPara1 +=" cho Việt Nam trong thế kỷ 20, một chiến sĩ cộng sản quốc tế.";

            dataPara1 +=" Ông là người viết và đọc bản Tuyên ngôn Độc lập Việt Nam khai sinh";

            dataPara1 +=" nước Việt Nam Dân chủ Cộng hòa ngày 2 tháng 9 năm 1945 tại quảng";

            dataPara1 +=" trường Ba Đình, Hà Nội, là Chủ tịch nước Việt Nam Dân chủ Cộng hòa";

            dataPara1 +=" trong thời gian 1945 – 1969, Chủ tịch Ban Chấp hành Trung ương Đảng";

            dataPara1 +=" Lao động Việt Nam trong thời gian 1951 – 1969.";

            XWPFRun para1Run = para1.createRun();             

            para1Run.setText(dataPara1);

 

            //Bước 4: Ghi dữ liệu ra file word

            FileOutputStream out = new FileOutputStream("src/demo/data.docx");

            document.write(out);

            out.close();

            document.close();

        } catch (IOException ex) {

            Logger.getLogger(TaoFileWord.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}

Sau khi chạy chương trình chúng ta sẽ tạo được nội dung của file word như sau:

Phần 2: Tạo một file word có Border cho nội dung hiển thị:

Sử dụng code như các bước dưới đây để tạo border cho các paragraph hiển thị

package demo;

 

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.poi.xwpf.usermodel.Borders;

import org.apache.poi.xwpf.usermodel.ParagraphAlignment;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.poi.xwpf.usermodel.XWPFRun;

 

/**

 *

 * @author HAITHANH

 */

public class TaoFileWordCoParagraph {

 

    public static void main(String[] args) {

        try {

            //Bước 1: Khởi tạo đối tượng để sinh ra file word

            XWPFDocument document = new XWPFDocument();

 

            //Bước 2: Tạo tiêu đề bài viết

            XWPFParagraph titleGraph = document.createParagraph();

            titleGraph.setAlignment(ParagraphAlignment.CENTER);

            String title = "TẠO BORDER CHO NỘI DUNG HIỂN THỊ";

            XWPFRun titleRun = titleGraph.createRun();

            titleRun.setBold(true);

            titleRun.setText(title);

 

            //Bước 3: Tạo đoạn văn bản 1 trong tài liệu:

            XWPFParagraph para1 = document.createParagraph();

            para1.setAlignment(ParagraphAlignment.LEFT);

           

            //Tạo border cho paragraph 1

            para1.setBorderBottom(Borders.BASIC_BLACK_DASHES);           

            para1.setBorderLeft(Borders.BASIC_BLACK_DASHES);           

            para1.setBorderRight(Borders.BASIC_BLACK_DASHES);           

            para1.setBorderTop(Borders.BASIC_BLACK_DASHES);           

           

            XWPFRun para1Run = para1.createRun();

            para1Run.setText("Đoạn văn bản 1");

            para1Run.addBreak();

            para1Run.setText("Nội dung của đoạn văn bản 1");

           

            //Bước 4: Tạo khoảng cách giữa paragraph 1 và paragraph 2

            XWPFParagraph paraBreak1 = document.createParagraph();

            XWPFRun runBreak1 = paraBreak1.createRun();

            runBreak1.addBreak();

           

            //Bước 5: Tạo đoạn văn bản 2:

            XWPFParagraph para2 = document.createParagraph();           

            para2.setAlignment(ParagraphAlignment.LEFT); 

           

            //Tạo border cho paragraph 2

            para2.setBorderBottom(Borders.BASIC_BLACK_DASHES);           

            para2.setBorderLeft(Borders.BASIC_BLACK_DASHES);           

            para2.setBorderRight(Borders.BASIC_BLACK_DASHES);           

            para2.setBorderTop(Borders.BASIC_BLACK_DASHES);

           

            XWPFRun para2Run = para2.createRun();           

            para2Run.setText("Đoạn văn bản 2");

            para2Run.addBreak();

            para2Run.setText("Nội dung của đoạn văn bản 2");

           

            //Bước 6: Tạo khoảng cách giữa paragraph 2 và paragraph 3

            XWPFParagraph paraBreak2 = document.createParagraph();

            XWPFRun runBreak2 = paraBreak2.createRun();

            runBreak2.addBreak();

           

            //Bước 7: Tạo đoạn văn bản 3:

            XWPFParagraph para3 = document.createParagraph();

            para3.setAlignment(ParagraphAlignment.LEFT); 

           

            //Tạo border cho paragraph 3

            para3.setBorderBottom(Borders.BASIC_BLACK_DASHES);           

            para3.setBorderLeft(Borders.BASIC_BLACK_DASHES);           

            para3.setBorderRight(Borders.BASIC_BLACK_DASHES);           

            para3.setBorderTop(Borders.BASIC_BLACK_DASHES);

           

            XWPFRun para3Run = para3.createRun();            

            para3Run.setText("Đoạn văn bản 3");

            para3Run.addBreak();

            para3Run.setText("Nội dung của đoạn văn bản 3");

           

            //Bước 8: Ghi dữ liệu ra file word

            FileOutputStream out = new FileOutputStream("src/demo/data.docx");

            document.write(out);

            out.close();

            document.close();

        } catch (IOException ex) {

            Logger.getLogger(TaoFileWordCoParagraph.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}

Khi chạy chương trình chúng ta được kết quả sau:

Như vậy nhờ các gói thư viện được cung cấp, bạn đã có thể dễ dàng tạo được nội dung báo cáo qua các file word được sinh ra. Khi muốn hiển thị nội dung theo một cách nào trong file word, bạn chỉ cần tìm hiểu xem phương thức của lớp nào hỗ trợ cách tạo ra kiểu đó mà thôi.

   0968276996