poi word 表格设置居中、左对齐缩进、边框、字体_poi生成word表格 内容居中_普通网友的博客-CSDN博客

 个人记录使用

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

        2.边框设置可参考 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网址:Poi-tl Documentationword模板引擎icon-default.png?t=M3K6http://deepoove.com/poi-tl/

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

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


原网址: 访问
创建于: 2023-04-26 11:02:15
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论