向表格指定位置添加行(复制指定行的样式给新行)
使用poi操作word的表格时,可以事先制定好word模板及其表格的样式,然后再通过代码动态的修改较为方便。
代码示例
/**
* des:表末尾添加行(表,要复制样式的行,添加行数,插入的行下标索引)
* @param table
* @param source
* @param rows
*/
public void addRows(XWPFTable table, int source, int rows, int insertRowIndex){
try{
//获取表格的总行数
int index = table.getNumberOfRows();
//循环添加行和和单元格
for(int i=1;i<=rows;i++) {
//获取要复制样式的行
XWPFTableRow sourceRow = table.getRow(source);
//添加新行
XWPFTableRow targetRow = table.insertNewTableRow(insertRowIndex++);
//复制行的样式给新行
targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());
//获取要复制样式的行的单元格
List<XWPFTableCell> sourceCells = sourceRow.getTableCells();
//循环复制单元格
for (XWPFTableCell sourceCell : sourceCells) {
//添加新列
XWPFTableCell newCell = targetRow.addNewTableCell();
//复制单元格的样式给新单元格
newCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
//设置垂直居中
newCell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//垂直居中
//复制单元格的居中方式给新单元格
CTPPr pPr = sourceCell.getCTTc().getPList().get(0).getPPr();
if(pPr!=null&&pPr.getJc()!=null&&pPr.getJc().getVal()!=null){
CTTc cttc = newCell.getCTTc();
CTP ctp = cttc.getPList().get(0);
CTPPr ctppr = ctp.getPPr();
if (ctppr == null) {
ctppr = ctp.addNewPPr();
}
CTJc ctjc = ctppr.getJc();
if (ctjc == null) {
ctjc = ctppr.addNewJc();
}
ctjc.setVal(pPr.getJc().getVal()); //水平居中
}
//得到复制单元格的段落
List<XWPFParagraph> sourceParagraphs = sourceCell.getParagraphs();
if (StringUtils.isEmpty(sourceCell.getText())) {
continue;
}
//拿到第一段
XWPFParagraph sourceParagraph = sourceParagraphs.get(0);
//得到新单元格的段落
List<XWPFParagraph> targetParagraphs = newCell.getParagraphs();
//判断新单元格是否为空
if (StringUtils.isEmpty(newCell.getText())) {
//添加新的段落
XWPFParagraph ph = newCell.addParagraph();
//复制段落样式给新段落
ph.getCTP().setPPr(sourceParagraph.getCTP().getPPr());
//得到文本对象
XWPFRun run = ph.getRuns().isEmpty() ? ph.createRun() : ph.getRuns().get(0);
//复制文本样式
run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());
} else {
XWPFParagraph ph = targetParagraphs.get(0);
ph.getCTP().setPPr(sourceParagraph.getCTP().getPPr());
XWPFRun run = ph.getRuns().isEmpty() ? ph.createRun() : ph.getRuns().get(0);
run.setFontFamily(sourceParagraph.getRuns().get(0).getFontFamily());
}
}
}
}catch (Exception e){
log.error(e.getMessage(),e);
}
}
拓展:https://blog.csdn.net/qq_33612228/article/details/109333638