poi word 表格设置居中、左对齐缩进、边框、字体

个人记录使用

        表格居中与左对齐缩进二选一

package com.gsafety.anjian.analysis.util;
/**
 * 设置poi-tl生成嵌套子模板中的表格垂直居中
 *
 */
 
import com.deepoove.poi.NiceXWPFDocument;
import com.deepoove.poi.XWPFTemplate;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
 
import java.math.BigInteger;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
public class PoilUtil {
    private static String notpath = "/evn_ets_rescueprogramme/moduleflag-1/";
 
    public static void setExcelVertical(XWPFTemplate template, String dirPath) {
        NiceXWPFDocument document = template.getXWPFDocument();
        List<XWPFTable> tables = document.getTables();
        if (tables!=null && tables.size()>1) {
            for (int z = 1; z < tables.size(); z++) {
                XWPFTable table = tables.get(z);
                CTTblLayoutType type = table.getCTTbl().getTblPr().addNewTblLayout();
                type.setType(STTblLayoutType.FIXED);
                //设置表格居中
                CTJc jc = table.getCTTbl().getTblPr().getJc();
                if(jc == null){
                    jc = table.getCTTbl().getTblPr().addNewJc();
                }
                jc.setVal(STJc.CENTER);
                table.getCTTbl().getTblPr().setJc(jc);
 
                //设置表格左对齐缩进
                /*CTTblWidth tblInd = table.getCTTbl().getTblPr().getTblInd();
                if(null == tblInd){
                    tblInd = table.getCTTbl().getTblPr().addNewTblInd();
                }
                //缩进距离
                tblInd.setW(BigInteger.valueOf(170));
                table.getCTTbl().getTblPr().setTblInd(tblInd);*/
                /**************设置表格样式*****************/
                if("/evn_ets_rescueprogramme/moduleflag-3/".equals(dirPath)){
                    List<CTTblGridCol> gridColList = table.getCTTbl().getTblGrid().getGridColList();
                    if (CollectionUtils.isNotEmpty(gridColList)) {
						//根据不同列长度,设置不同列宽,具体宽度以提供的模板为准
                        if (gridColList.size() == 5) {
                            CTTblGrid ctTblGrid = table.getCTTbl().addNewTblGrid();
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1222));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1609));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(2210));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1927));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1255));
                            table.getCTTbl().setTblGrid(ctTblGrid);
                        }else{
                            CTTblGrid ctTblGrid = table.getCTTbl().addNewTblGrid();
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1211));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(875));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(2493));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(821));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1578));
                            ctTblGrid.addNewGridCol().setW(BigInteger.valueOf(1257));
                            table.getCTTbl().setTblGrid(ctTblGrid);
                        }
                    }
					
                    //参考博客:https://blog.csdn.net/qq_31189355/article/details/80438506
                    CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();
                    //表格内部横向表格
                    CTBorder hBorder = borders.addNewInsideH();
                    // 线条类型(格式参考:创建word文档,参入最终需要的结果表格,另存xml文件,查看xml文件中的具体格式)
                    hBorder.setVal(STBorder.Enum.forString("single"));
                    // 线条大小
                    hBorder.setSz(new BigInteger("6"));
                    // 设置颜色
                    hBorder.setColor("auto");
                    // 表格内部纵向表格
                    CTBorder vBorder = borders.addNewInsideV();
                    vBorder.setVal(STBorder.Enum.forString("single"));
                    vBorder.setSz(new BigInteger("6"));
                    vBorder.setColor("auto");
                    //表格最左边一条线的样式
                    CTBorder lBorder = borders.addNewLeft();
                    lBorder.setVal(STBorder.Enum.forString("thinThickSmallGap"));
                    lBorder.setSz(new BigInteger("12"));
                    lBorder.setColor("auto");
                    //表格最上边一条线(顶部)的样式
                    CTBorder tBorder = borders.addNewTop();
                    tBorder.setVal(STBorder.Enum.forString("thinThickSmallGap"));
                    tBorder.setSz(new BigInteger("12"));
                    tBorder.setColor("auto");
                    //表格最右边一条线的样式
                    CTBorder rBorder = borders.addNewRight();
                    rBorder.setVal(STBorder.Enum.forString("thickThinSmallGap"));
                    rBorder.setSz(new BigInteger("12"));
                    rBorder.setColor("auto");
                    //表格最下边一条线(底部)的样式
                    CTBorder bBorder = borders.addNewBottom();
                    bBorder.setVal(STBorder.Enum.forString("thickThinSmallGap"));
                    bBorder.setSz(new BigInteger("12"));
                    bBorder.setColor("auto");
                }
                /**************设置表格样式**************/
                List<XWPFTableRow>  rows = table.getRows();
                if (rows!=null && rows.size()>0) {
                    for (int i = 0; i < rows.size(); i++) {
                        XWPFTableRow row = rows.get(i);
                        //for (XWPFTableRow row : rows) {
                        //设置表格内容不允许跨页换行
                        row.setCantSplitRow(true);
                        if (i==0) {
                            //设置表格标题在每一页显示
                            row.setRepeatHeader(true);
                        }
                        if(notpath.indexOf(dirPath)<0){
                            List<XWPFTableCell> cells = row.getTableCells();
                            if (cells!=null && cells.size()>0) {
                                for (XWPFTableCell cell : cells) {
                                    if (StringUtils.isNotBlank(cell.getText())) {
										//垂直居中
                                        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); 
                                    }
                                }
                            }
                        }
                        //字体处理
                        if(("/evn_ets_rescueprogramme/moduleflag-3/".equals(dirPath)) && i > 0){
                            List<XWPFTableCell> cells = row.getTableCells();
                            if (cells!=null && cells.size()>0) {
                                for (XWPFTableCell cell : cells) {
                                    List<XWPFParagraph> paragraphs = cell.getParagraphs();
                                    for (int j = 0; j < paragraphs.size(); j++) {
                                        XWPFParagraph xwpfParagraph = paragraphs.get(j);
                                        List<XWPFRun> runs = xwpfParagraph.getRuns();
                                        for (int k = 0; k < runs.size(); k++) {
                                            XWPFRun xwpfRun = runs.get(k);
                                            CTFonts font = xwpfRun.getCTR().addNewRPr().addNewRFonts();
                                            //中文
                                            font.setEastAsia("仿宋_GB2312"); //改变中文字体设置这个
                                            // ASCII
                                            font.setAscii("Times New Roman"); //改变数字或者英文字体需要设置这个
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

项目中使用的poi-tl进行渲染模板,mavne依赖如下,poi-tl网址:
http://deepoove.com/poi-tl/icon-default.png?t=M85Bhttp://deepoove.com/poi-tl/

<dependency>
     <groupId>com.deepoove</groupId>
     <artifactId>poi-tl</artifactId>
     <version>1.4.0</version>
</dependency>


补充:由于表格边框采取双边框样式,左上与右下的边框样式会存在差别,右下边框需要使用与左上相反的边框样式,整个表格边框样式才会完整,以上代码块样式已调整

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值