Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

apache poi add table in word document

I have Java code to create a table and some texts to a Word document using Apache POI, but it adds table in last document. I want to write some text, then add table and write some text again.

Currently it adds table first and last document add 2 texts (Hi & Bye)

My code :

public static void main(String[] args)throws Exception {
        //Blank Document
        XWPFDocument document= new XWPFDocument();

        //Write the Document in file system
        FileOutputStream out = new FileOutputStream(
        new File("create_table.docx"));

        //create table
        XWPFTable table    = document.createTable();
        XWPFParagraph para = document.createParagraph();
        XWPFRun run        = para.createRun();

        run.setText("Hi");
        //create first row
        XWPFTableRow tableRowOne = table.getRow(0);
        tableRowOne.getCell(0).setText("col one, row one");
        tableRowOne.addNewTableCell().setText("col two, row one");
        tableRowOne.addNewTableCell().setText("col three, row one");
        //create second row
        XWPFTableRow tableRowTwo = table.createRow();
        tableRowTwo.getCell(0).setText("col one, row two");
        tableRowTwo.getCell(1).setText("col two, row two");
        tableRowTwo.getCell(2).setText("col three, row two");
        //create third row
        XWPFTableRow tableRowThree = table.createRow();
        tableRowThree.getCell(0).setText("col one, row three");
        tableRowThree.getCell(1).setText("col two, row three");
        tableRowThree.getCell(2).setText("col three, row three");

        run.setText("Bye");

        document.write(out);
        out.close();
        System.out.println("create_table.docx written successully");
}

How can i print Hi first of page and add table and print Bye after table?

And how can i save document every time when i want add content to it and finally write it and open it ?

Thanks

like image 845
Nass Avatar asked Jan 27 '16 10:01

Nass


1 Answers

You have to keep the right order and more importantly : You have to create a new paragraph.

This is the code, you'll need :

public static void main(String[] args) throws IOException {

    //Blank Document
    XWPFDocument document = new XWPFDocument();

    //Write the Document in file system
    FileOutputStream out = new FileOutputStream(new File("create_table.docx"));

    //Write first Text in the beginning
    XWPFParagraph para = document.createParagraph();
    XWPFRun run = para.createRun();
    run.setText("Hi");

    //create table
    XWPFTable table = document.createTable();

    //create first row
    XWPFTableRow tableRowOne = table.getRow(0);
    tableRowOne.getCell(0).setText("col one, row one");
    tableRowOne.addNewTableCell().setText("col two, row one");
    tableRowOne.addNewTableCell().setText("col three, row one");
    //create second row
    XWPFTableRow tableRowTwo = table.createRow();
    tableRowTwo.getCell(0).setText("col one, row two");
    tableRowTwo.getCell(1).setText("col two, row two");
    tableRowTwo.getCell(2).setText("col three, row two");
    //create third row
    XWPFTableRow tableRowThree = table.createRow();
    tableRowThree.getCell(0).setText("col one, row three");
    tableRowThree.getCell(1).setText("col two, row three");
    tableRowThree.getCell(2).setText("col three, row three");

    //Write second Text after the table (by creating a new paragraph)
    XWPFParagraph para2 = document.createParagraph();
    XWPFRun run2 = para2.createRun();
    run2.setText("Bye");

    document.write(out);
    out.close();
    System.out.println("create_table.docx written successully");
}

This is the output, you'll get:

Output

like image 129
i23 Avatar answered Oct 12 '22 12:10

i23