poi word操作之XWPFTable给表格添加行(复制指定行的样式给新行)

向表格指定位置添加行(复制指定行的样式给新行)

使用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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值