需求:有一個給定的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