我有一个包含1行和2列的Word表,我想使用带有Java的Apache poi插入一个包含3列的新行。我想要实现的是:
但我得到的是:
我在互联网上搜索了一个解决方案,但我得到的只是设置列宽,这对我的情况不起作用。任何人都可以帮我解决这个问题吗?
这是我从Stack Overflow中的一个示例中获取的代码,用于处理第二张图片中显示的输出:
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");
}
答案 0 :(得分:0)
我可以为java世界提出一个解决方案,但不能用poi ...
使用pxDoc(www.pxdoc.fr,免责声明:我是其作者之一......),使用以下代码可以完美实现:
document {
table {
row {
cell { "Column 1" }
cell { "Column 2" }
}
row {
for (var i = 0; i < 3; i++) {
cell {
"NewRow C" + i
}
}
}
}
}