Die XWPFTable
erstellt XWPFDocument.createTable
verwendet, wird auf das Dokument immer gehört. So kann es später nicht aus dem Dokument entnommen und in eine Zelle gesteckt werden.
Dafür wird XWPFTableCell.insertNewTbl benötigt.
Der folgende Code funktioniert tatsächlich apache poi
Versionen mit:
import java.io.*;
import org.apache.poi.xwpf.usermodel.*;
public class CreateWordTableInTable {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFTable tableOne = document.createTable(2,2);
XWPFTableRow tablerow = tableOne.getRow(0);
tablerow.getCell(0).setText("Test");
tablerow.getCell(1).setText("Test");
tablerow = tableOne.getRow(1);
tablerow.getCell(0).setText("Test");
XWPFParagraph paragraph = tablerow.getCell(1).getParagraphArray(0);
XWPFTable tableTwo = tablerow.getCell(1).insertNewTbl(paragraph.getCTP().newCursor());
tableTwo.getCTTbl().addNewTblPr().addNewTblBorders().addNewLeft().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tableTwo.getCTTbl().getTblPr().getTblBorders().addNewRight().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tableTwo.getCTTbl().getTblPr().getTblBorders().addNewTop().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tableTwo.getCTTbl().getTblPr().getTblBorders().addNewBottom().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tableTwo.getCTTbl().getTblPr().getTblBorders().addNewInsideH().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tableTwo.getCTTbl().getTblPr().getTblBorders().addNewInsideV().setVal(
org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder.SINGLE);
tablerow = tableTwo.createRow();
tablerow.createCell().setText("aaaaaaaaaa");
tablerow.createCell().setText("jjjjjjjj");
tablerow = tableTwo.createRow();
tablerow.getCell(0).setText("bbbbbbbbbb");
tablerow.getCell(1).setText("gggggggggg");
document.write(new FileOutputStream("CreateWordTableInTable.docx"));
document.close();
}
}
Aber ich würde empfehlen, diesen Ansatz nicht zu verwenden, sondern fusionierten Zellen stattdessen zu verwenden. Tabellen, die in Tabellenzellen enthalten sind, sind hässlich. Dies gilt sowohl für HTML
als auch für Word
sowie für alle anderen Textdokumentformate, die Tabellen enthalten können.
Was bedeutet "aber Versagen"? Jede Ausnahme oder was? – Jens
gibt es keine Ausnahme, aber die TabelleTwo nicht in der TabelleOne eingefügt, TableTwo neben TableOne anhängen. – Sucy
Kannst du bitte ein [mcve] erstellen? – Jens