Java-通过POI给Word文档的表格增加行
2023-01-02 00:00:00
java
目录
- 问题描述:需要通过程序动态的给word文档中的表格添加内容
- POI版本:3-4适用
- 第一种方式,createRow()创建无样式行。如果想添加样式,可以通过手动设置表边框实现
- 第二种方式(推荐)addRow(XWPFTableRow row) 方法直接创建相同样式行
问题描述:需要通过程序动态的给word文档中的表格添加内容
POI版本:3-4适用
解决方法:
POI提供了四种方法添加行:
- 调用createRow() 方法创建行,无样式
- 调用addRow(XWPFTableRow row) 方法创建,有样式
- 调用addNewRowBetween()方法,不生效,官方文档显示已弃用
- 调用insertNewTableRow() 方法创建行,无样式,并且还需要调用addNewCol() 来添加一列数据,列数必须统一,否则生成的Word无法打开,不推荐。
下面来详细说说前两种方法:
第一种方式,createRow()创建无样式行。如果想添加样式,可以通过手动设置表边框实现
注意:这种方法存在一定局限性,当word文档中存在多个表,会同时设置其他表的边框。
代码如下:
// 给表添加边框
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");
//创建行,设置内容
XWPFTableRow row = table.createRow();
.....
第二种方式(推荐)addRow(XWPFTableRow row) 方法直接创建相同样式行
错误用法1(直接使用表头行创建row对象,会导致该对象只能修改表头的内容,却无法修改生成行的内容):
XWPFTableRow row = new XWPFTableRow(table.getRow(0).getCtRow(),table);
//设置行内容
.....
//添加行
table.addRow(row)
错误用法2(把行添加到表里后才设置行内容,会导致行内容为空):
CTRow ctrow = CTRow.Factory.parse(table.getRow(0).getCtRow().newInputStream());//重点行
XWPFTableRow row = new XWPFTableRow(ctrow, table);
//添加行
table.addRow(row)
//设置行内容
.....
正确用法:
//复制表头行的样式
CTRow ctrow = CTRow.Factory.parse(table.getRow(0).getCtRow().newInputStream());//重点行
//创建相同样式行
XWPFTableRow row = new XWPFTableRow(ctrow, table);
//设置行内容
.....
//添加到表里
table.addRow(row)
原文作者:Yaberrr
原文地址: https://blog.csdn.net/weixin_40773848/article/details/118890842
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/weixin_40773848/article/details/118890842
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章