poi操作word复制表格
注意一个坑,addRow中的row是浅拷贝,所以复制出来的行其实都是传入的row对象
/**
* 在word表格中指定位置插入一行,并将某一行的样式复制到新增行
* @param sourceRow 需要复制的行
* @param rowIndex 需要新增一行的位置
*/
public static void copyRow(XWPFTable table,XWPFTableRow sourceRow,int rowIndex){
//在表格指定位置新增一行
XWPFTableRow targetRow = table.insertNewTableRow(rowIndex);
//复制行属性
targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());
List<XWPFTableCell> cellList = sourceRow.getTableCells();
if (null == cellList) {
return;
}
//复制列及其属性和内容
XWPFTableCell targetCell = null;
for (XWPFTableCell sourceCell : cellList) {
targetCell = targetRow.addNewTableCell();
targetCell.addParagraph();
//列属性
targetCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
//段落属性
if(sourceCell.getParagraphs()!=null&&sourceCell.getParagraphs().size()>0){
targetCell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());
if(sourceCell.getParagraphs().get(0).getRuns()!=null&&sourceCell.getParagraphs().get(0).getRuns().size()>0){
XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();
cellR.setText(sourceCell.getText());
cellR.setBold(sourceCell.getParagraphs().get(0).getRuns().get(0).isBold());
// 设置run的样式
cellR.getCTR().setRPr(sourceCell.getParagraphs().get(0).getRuns().get(0).getCTR().getRPr());
}else{
targetCell.setText(sourceCell.getText());
}
}else{
targetCell.setText(sourceCell.getText());
}
}
}