1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > POI 设置Word表格边框 表格文字水平居中

POI 设置Word表格边框 表格文字水平居中

时间:2024-03-19 01:40:23

相关推荐

POI 设置Word表格边框 表格文字水平居中

问题描述设置边框表格内容水平居中完整方法(仅参考)

不逼逼多余的废话,简单的讲讲遇到的问题,以及处理办法。

问题描述

调用createRow()方法创建一行无样式。调用addRow()方法创建一行后成功添加边框,但添加的数据都挤在一行。

个人推测是因为addRow传入的行参数来自同一对象,导致数据重复添加。网传调用addNewRowBetween()方法创建一行存在边框。但新版中该方法体未实现。

个人下载了3.10.x所有包,都不存在该方法的实现。调用insertNewTableRow()方法创建一行无样式,并且还需要调用addNewCol()来添加一列数据,列数必须统一,否则导出的Wrod是无法打开的。

设置边框

下面代码分别设置XWPFTable上下左右实线黑色边框,放到头部定义就好。定义完成我们就能使用createRow()添加出有边框的表格

CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();CTBorder hBorder = borders.addNewInsideH();hBorder.setVal(STBorder.Enum.forString("single")); // 线条类型hBorder.setSz(new BigInteger("1")); // 线条大小hBorder.setColor("000000"); // 设置颜色CTBorder vBorder = borders.addNewInsideV();vBorder.setVal(STBorder.Enum.forString("single"));vBorder.setSz(new BigInteger("1"));vBorder.setColor("000000");CTBorder lBorder = borders.addNewLeft();lBorder.setVal(STBorder.Enum.forString("single"));lBorder.setSz(new BigInteger("1"));lBorder.setColor("000000");CTBorder rBorder = borders.addNewRight();rBorder.setVal(STBorder.Enum.forString("single"));rBorder.setSz(new BigInteger("1"));rBorder.setColor("000000");CTBorder tBorder = borders.addNewTop();tBorder.setVal(STBorder.Enum.forString("single"));tBorder.setSz(new BigInteger("1"));tBorder.setColor("000000");CTBorder bBorder = borders.addNewBottom();bBorder.setVal(STBorder.Enum.forString("single"));bBorder.setSz(new BigInteger("1"));bBorder.setColor("000000");table.createRow(); // 增加一行

表格内容水平居中

这里的水平居中需针对到每一个单元格设置(可能有全局设置,只不过我不晓得)

XWPFTableCell cell = cells.get(index);/** 设置水平居中 */CTTc cttc = cell.getCTTc();CTTcPr ctPr = cttc.addNewTcPr();ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);

使用此方法设置水平居中还需ooxml-schemas包,看清楚不是poi-ooxml-schemas

完整方法(仅参考)

个人使用,做个备忘录,来到这个页面的小伙伴不需要关注这里 - -

/*** 为表格插入数据,行数不够添加新行** @param table需要插入数据的表格* @param tableList 插入数据集合*/private void insertTable(XWPFTable table, List<String[]> tableList) {// 添加边框CTTblBorders borders = table.getCTTbl().getTblPr().addNewTblBorders();CTBorder hBorder = borders.addNewInsideH();hBorder.setVal(STBorder.Enum.forString("single"));hBorder.setSz(new BigInteger("1"));hBorder.setColor("000000");CTBorder vBorder = borders.addNewInsideV();vBorder.setVal(STBorder.Enum.forString("single"));vBorder.setSz(new BigInteger("1"));vBorder.setColor("000000");CTBorder lBorder = borders.addNewLeft();lBorder.setVal(STBorder.Enum.forString("single"));lBorder.setSz(new BigInteger("1"));lBorder.setColor("000000");CTBorder rBorder = borders.addNewRight();rBorder.setVal(STBorder.Enum.forString("single"));rBorder.setSz(new BigInteger("1"));rBorder.setColor("000000");CTBorder tBorder = borders.addNewTop();tBorder.setVal(STBorder.Enum.forString("single"));tBorder.setSz(new BigInteger("1"));tBorder.setColor("000000");CTBorder bBorder = borders.addNewBottom();bBorder.setVal(STBorder.Enum.forString("single"));bBorder.setSz(new BigInteger("1"));bBorder.setColor("000000");//创建行,根据需要插入的数据添加新行,不处理表头for (int i = 1; i < tableList.size(); i++) {table.createRow();}//遍历表格插入数据List<XWPFTableRow> rows = table.getRows();for (int i = 1; i < rows.size(); i++) {List<XWPFTableCell> cells = rows.get(i).getTableCells();for (int j = 0; j < cells.size(); j++) {XWPFTableCell cell = cells.get(j);// 设置水平居中,需要ooxml-schemas包支持CTTc cttc = cell.getCTTc();CTTcPr ctPr = cttc.addNewTcPr();ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);cell.setText(tableList.get(i - 1)[j]);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。