需求:有一个给定的word文档,文档中有一个表格,该表格只有一个标题行。现在根据数据为表格增加行,并保留表格线条。
如下表格所示:
字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6 |
修改后的效果:
字段1 | 字段2 | 字段3 | 字段4 | 字段5 | 字段6 |
... | ... | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... |
方案:使用POI读取并操作word文档。
代码:
poi使用两种方式操作word文档,理论上两种方式都是可以达到目标的,这里使用XWPFDocument方式实现表格的操作,参考以下代码:
-
//读取word源文件
-
FileInputStream fileInputStream = new FileInputStream("d:/xxx.docx");
-
// POIFSFileSystem pfs = new POIFSFileSystem(fileInputStream);
-
XWPFDocument document = new XWPFDocument(fileInputStream);
-
//获取所有表格
-
List<XWPFTable> tables = document.getTables();
-
//这里简单取第一个表格
-
XWPFTable table = tables.get( 0);
-
//获取表头,这里没什么用,只是打印验证下
-
XWPFTableRow header = table.getRow( 0);
-
//表格的插入行有两种方式,这里使用addNewRowBetween,因为这样会保留表格的样式,就像我们在word文档的表格中插入行一样。注意这里不要使用insertNewTableRow方法插入新行,这样插入的新行没有样式,很难看
-
table.addNewRowBetween( 0, 1);
-
//获取到刚刚插入的行
-
XWPFTableRow row=table.getRow( 1);
-
//设置单元格内容
-
row.getCell( 0).setText("11111");
-
System.out.println(header.getCell( 0).getText());
-
fileInputStream.close();
-
//写到目标文件
-
OutputStream output = new FileOutputStream("d:/xxx_new.docx");
-
document.write(output);
-
output.close();
小结:
上述代码实现了类似模板的功能,将word源文件当做模板,然后往模板表格中插入数据,最后保存。
转自:http://www.findsrc.com/java/detail/8669