POI设置Word表格边框、表格⽂字⽔平居中
不多余的废话,简单的讲讲遇到的问题,以及处理办法。
问题描述
1. 调⽤createRow() ⽅法创建⼀⾏⽆样式。
2. 调⽤addRow() ⽅法创建⼀⾏后成功添加边框,但添加的数据都挤在⼀⾏。
个⼈推测是因为addRow传⼊的⾏参数来⾃同⼀对象,导致数据重复添加。
3. ⽹传调⽤addNewRowBetween() ⽅法创建⼀⾏存在边框。但新版中该⽅法体未实现。
个⼈下载了3.10.x所有包,都不存在该⽅法的实现。
4. 调⽤insertNewTableRow() ⽅法创建⼀⾏⽆样式,并且还需要调⽤addNewCol() 来添加⼀列数据,列数必须统⼀,否则导出的
Wrod是⽆法打开的。
设置边框
下⾯代码分别设置XWPFTable上下左右实线⿊⾊边框,放到头部定义就好。定义完成我们就能使⽤createRow()添加出有边框的表格
CTTblBorders borders = CTTbl().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");
表格内容⽔平居中
这⾥的⽔平居中需针对到每⼀个单元格设置(可能有全局设置,只不过我不晓得)
使⽤此⽅法设置⽔平居中还需ooxml-schemas包,看清楚不是poi-ooxml-schemas 完整⽅法(仅参考)
个⼈使⽤,做个备忘录,来到这个页⾯的⼩伙伴不需要关注这⾥ - -
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 );
/**
* 为表格插⼊数据,⾏数不够添加新⾏
*
* @param table    需要插⼊数据的表格
* @param tableList 插⼊数据集合
*/
private void insertTable(XWPFTable table, List<String[]> tableList) {
// 添加边框
CTTblBorders borders = CTTbl().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++) {
}
/
/遍历表格插⼊数据
List<XWPFTableRow> rows = Rows();
for (int i = 1; i < rows.size(); i++) {
List<XWPFTableCell> cells = (i).getTableCells();
for (int j = 0; j < cells.size(); j++) {
XWPFTableCell cell = (j);
// 设置⽔平居中,需要ooxml-schemas包⽀持
CTTc cttc = CTTc();
table设置内边框
CTTcPr ctPr = cttc.addNewTcPr();
ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
cell.(i - 1)[j]);
}
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。