Now I am going to give you the keys to the kingdom here. The XML formats are 
really easy to deal with. Simply create a document in Word that contains the 
element you want to duplicate. Then if POI does not expose that element, rename 
your document from XXX.docx to xxx.zip. You can now look at the XML. Most 
relevant XML is in word/document.xml. There are other parts like headers and 
footers, but you can test most things in the main document body. Then look at 
the element you want to be able to produce with POI. If you make you document 
small and simple, this will be easier. The CT classes track very closely to the 
XML node names with CT tacked on the front and namespaces removed. Add and set 
methods are the most useful followed by isset. Once you use a few of them you 
will get the hang of it, and be able to look up and write methods to duplicate 
missing functionality with ease.

-----Original Message-----
From: Murphy, Mark [mailto:murphym...@metalexmfg.com] 
Sent: Thursday, September 01, 2016 11:58 AM
To: 'Krishna Vyas Majji' <krishna.ma...@quest-global.com>
Cc: user@poi.apache.org
Subject: RE: How to insert table inside tablerowcell using apache poi

This should do it. Note: the inner table has to be handled with the CT classes 
since cells containing anything other than paragraphs does not seem to be 
available yet. Also, every table cell must end with a paragraph. For now, when 
a table cell is created, a blank paragraph is added automatically. I don't 
really like this behavior, but given the requirement that a cell must contain 
at least one paragraph, and the last element in a cell must be a paragraph, I 
am going to have to adjust the code to deal with this in a more user friendly 
manner.

You will, of course, want to add loops, as appropriate to your situation, to 
minimize redundant code :)

Please ask these things on the list in the future so others can benefit from 
your questions.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.List;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;

public class TableTest {

       /**
       * @param args
       */
       public static void main(String[] args) {
              // Blank Document
              XWPFDocument doc = new XWPFDocument();
              XWPFTable tbl = doc.createTable(2,2);
              XWPFTableCell cell;
              XWPFParagraph p;
              List<XWPFParagraph> pList;
              CTTbl ctTable;
              CTTblPr ctTPr;
              CTTblWidth ctTW;
              CTTblBorders ctBorders;
              CTBorder ctB;
              CTRow ctRow;
              CTTc ctCell;
              CTP ctP;
              CTR ctR;
              CTText ctTx;


              cell = tbl.getRow(0).getCell(0);
              pList = cell.getParagraphs();
              if (pList.size() == 0) {
                     p = cell.addParagraph();
              }
              p = pList.get(0);
              p.createRun().setText("Cell 1, Row 1");

              cell = tbl.getRow(0).getCell(1);
              pList = cell.getParagraphs();
              if (pList.size() == 0) {
                     p = cell.addParagraph();
              }
              p = pList.get(0);
              p.createRun().setText("Cell 2, Row 1");

              cell = tbl.getRow(1).getCell(0);
              pList = cell.getParagraphs();
              if (pList.size() == 0) {
                     p = cell.addParagraph();
              }
              p = pList.get(0);
              p.createRun().setText("Cell 1, Row 2");

              cell = tbl.getRow(1).getCell(1);
              pList = cell.getParagraphs();
              if (pList.size() == 0) {
                     p = cell.addParagraph();
              }
              p = pList.get(0);
              p.createRun().setText("Cell 2, Row 2");
              ctCell = cell.getCTTc();
              ctTable = ctCell.addNewTbl();
              ctTPr = ctTable.addNewTblPr();
              ctTW = ctTPr.addNewTblW();
              ctTW.setW(new BigInteger("0"));
              ctTW.setType(STTblWidth.AUTO);
              ctBorders = ctTPr.addNewTblBorders();
              ctB = ctBorders.addNewTop();
              ctB.setVal(STBorder.SINGLE);
              ctB = ctBorders.addNewLeft();
              ctB.setVal(STBorder.SINGLE);
              ctB = ctBorders.addNewBottom();
              ctB.setVal(STBorder.SINGLE);
              ctB = ctBorders.addNewRight();
              ctB.setVal(STBorder.SINGLE);
              ctB = ctBorders.addNewInsideH();
              ctB.setVal(STBorder.SINGLE);
              ctB = ctBorders.addNewInsideV();
              ctB.setVal(STBorder.SINGLE);
              ctRow = ctTable.addNewTr();
              ctCell = ctRow.addNewTc();
              ctP = ctCell.addNewP();
              ctR = ctP.addNewR();
              ctTx = ctR.addNewT();
              ctTx.setStringValue("Cell 1, Row 1");
              ctCell = ctRow.addNewTc();
              ctP = ctCell.addNewP();
              ctR = ctP.addNewR();
              ctTx = ctR.addNewT();
              ctTx.setStringValue("Cell 2, Row 1");
              ctRow = ctTable.addNewTr();
              ctCell = ctRow.addNewTc();
              ctP = ctCell.addNewP();
              ctR = ctP.addNewR();
              ctTx = ctR.addNewT();
              ctTx.setStringValue("Cell 1, Row 2");
              ctCell = ctRow.addNewTc();
              ctP = ctCell.addNewP();
              ctR = ctP.addNewR();
              ctTx = ctR.addNewT();
              ctTx.setStringValue("Cell 2, Row 2");

              // A paragraph has to be the last element in a table cell.
              p = cell.addParagraph();
              p.createRun().addCarriageReturn();


              // Write the Document in file system
              try {
                     FileOutputStream out = new FileOutputStream(new File(
                                  "tabletest.docx"));
                     doc.write(out);
                     out.close();
                     doc.close();
                     System.out.println("tabletest.docx written successully");
              } catch (FileNotFoundException e) {
                     e.printStackTrace();
              } catch (IOException e) {
                     e.printStackTrace();
              }
       }

}


From: Krishna Vyas Majji [mailto:krishna.ma...@quest-global.com]
Sent: Thursday, September 01, 2016 10:49 AM
To: Murphy, Mark <murphym...@metalexmfg.com>
Subject: RE: How to insert table inside tablerowcell using apache poi

I tried mark I am not getting exactly like this. Do you have any sample code 
snippet?

From: Murphy, Mark [mailto:murphym...@metalexmfg.com]
Sent: Thursday, September 01, 2016 7:03 PM
To: Krishna Vyas Majji
Subject: RE: How to insert table inside tablerowcell using apache poi

This is allowed, and should be possible.

From: Krishna Vyas Majji [mailto:krishna.ma...@quest-global.com]
Sent: Thursday, September 01, 2016 7:45 AM
To: Murphy, Mark <murphym...@metalexmfg.com<mailto:murphym...@metalexmfg.com>>
Subject: How to insert table inside tablerowcell using apache poi

Hi Mark,

Is it possible to create table inside cell using XWPF document As shown below. 
Thanks in advance.


Cell 1, Row 1

Cell 2, Row 1

Cell 1, Row 2

Cell 2, Row 2

Cell 1, Row 1

Cell 2, Row 1

Cell 1, Row 2

Cell 2, Row 2





Regards,
Krishna
---Disclaimer------------------------------ This e-mail contains PRIVILEGED AND 
CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If 
you are not the intended recipient, please notify the sender by e-mail and 
delete the original message. Opinions, conclusions and other information in 
this transmission that do not relate to the official business of QuEST Global 
and/or its subsidiaries, shall be understood as neither given nor endorsed by 
it. Any statements made herein that are tantamount to contractual obligations, 
promises, claims or commitments shall not be binding on the Company unless 
followed by written confirmation by an authorized signatory of the Company. 
-----------------------------------------------------------------------------------
---Disclaimer------------------------------ This e-mail contains PRIVILEGED AND 
CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If 
you are not the intended recipient, please notify the sender by e-mail and 
delete the original message. Opinions, conclusions and other information in 
this transmission that do not relate to the official business of QuEST Global 
and/or its subsidiaries, shall be understood as neither given nor endorsed by 
it. Any statements made herein that are tantamount to contractual obligations, 
promises, claims or commitments shall not be binding on the Company unless 
followed by written confirmation by an authorized signatory of the Company. 
-----------------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@poi.apache.org
For additional commands, e-mail: user-h...@poi.apache.org

Reply via email to