У меня есть таблица Word с 1 строкой и 2 столбцами, и я хочу вставить новую строку с 3 столбцами, используя Apache poi с Java.Чего я хочу достичь, так это:
Но я получаю вот что:
Я искал в Интернетедля решения, но все, что я получаю, было о настройке ширины столбца, которая не работает для моего случая.Может ли кто-нибудь помочь мне с этой проблемой?
Это мой код, который я взял из одного из примеров в переполнении стека, чтобы обойти это, чтобы получить вывод, показанный на втором рисунке:
File file = new File("C:\\Users\\USER\\Desktop\\testdoc.docx");
XWPFDocument doc = new XWPFDocument(new FileInputStream(file));
FileOutputStream out = new FileOutputStream(file);
XWPFTable table = doc.getTableArray(0);
XWPFTableRow oldRow = table.getRow(0);
table.insertNewTableRow(1);
XWPFTableRow newRow = table.getRow(1);
int indWidth = 0;
for(int i=0; i < oldRow.getTableCells().size(); i++) {
int sum = 0;
BigInteger width = oldRow.getCell(i).getCTTc().getTcPr().getTcW().getW();
sum += width.intValue();
indWidth = sum/oldRow.getTableCells().size();
}
XWPFTableCell cell;
for (int i = 0; i < 3; i++) {
cell = newRow.createCell();
CTTcPr ctTcPr = cell.getCTTc().addNewTcPr();
CTTblWidth cellWidth = ctTcPr.addNewTcW();
cellWidth.setType(oldRow.getCell(0).getCTTc().getTcPr().getTcW().getType()); // sets type of width
BigInteger width = BigInteger.valueOf(indWidth);
cellWidth.setW(width); // sets width
if (oldRow.getCell(0).getCTTc().getTcPr().getGridSpan() != null) {
ctTcPr.setGridSpan(oldRow.getCell(0).getCTTc().getTcPr().getGridSpan()); // sets grid span if any
}
XWPFRun run = cell.getParagraphs().get(0).createRun();
run.setText("NewRow C" + i);
}
doc.write(out);
doc.close();
System.out.println("Done");
}