XWPFDocument创建和读取Office Word文档基础篇(一) 您所在的位置:网站首页 hwpfdocument转换xwpfdocument XWPFDocument创建和读取Office Word文档基础篇(一)

XWPFDocument创建和读取Office Word文档基础篇(一)

2024-06-14 10:17| 来源: 网络整理| 查看: 265

参考API:http://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFDocument.html

主要参考文章1:http://www.cnblogs.com/Springmoon-venn/p/5494602.html

主要参考文章2:http://elim.iteye.com/blog/2049110

主要参考文章3:http://doc.okbase.net/oh_Maxy/archive/154764.html

 

 

建议大家使用office word来创建文档。(wps和word结构有些不一样)

 

IBodyElement -------------------迭代器(段落和表格)

XWPFComment -------------------评论(个人理解应该是批注)

XWPFSDT

XWPFFooter -------------------页脚

XWPFFootnotes -------------------脚注

XWPFHeader -------------------页眉

XWPFHyperlink -------------------超链接

XWPFNumbering -------------------编号(我也不知是啥...)

XWPFParagraph -------------------段落

XWPFPictureData -------------------图片

XWPFStyles -------------------样式(设置多级标题的时候用)

XWPFTable -------------------表格

 

1、正文段落

一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run,Run是文档的最小单元

获取所有段落:List paragraphs = word.getParagraphs();

获取一个段落中的所有Runs:List xwpfRuns = xwpfParagraph.getRuns();

获取一个Runs中的一个Run:XWPFRun run = xwpfRuns.get(index);

 

XWPFRun--代表具有相同属性的一段文本

 

 

2、正文表格

一个文档包含多个表格,一个表格包含多行,一行包含多列(格),每一格的内容相当于一个完整的文档

获取所有表格:List xwpfTables = doc.getTables();

获取一个表格中的所有行:List xwpfTableRows = xwpfTable.getRows();

获取一行中的所有列:List xwpfTableCells = xwpfTableRow.getTableCells();

获取一格里的内容:List paragraphs = xwpfTableCell.getParagraphs();

之后和正文段落一样

 

 

注:

表格的一格相当于一个完整的docx文档,只是没有页眉和页脚。里面可以有表格,使用xwpfTableCell.getTables()获取,and so on在poi文档中段落和表格是完全分开的,如果在两个段落中有一个表格,在poi中是没办法确定表格在段落中间的。(当然除非你本来知道了,这句是废话)。只有文档的格式固定,才能正确的得到文档的结构

 

个人理解:我不能确定表格所处的位置(第一个段落后面 ,还是第二个段落后面...)

 

 

3、页眉:

一个文档可以有多个页眉,页眉里面可以包含段落和表格

获取文档的页眉:List headerList = doc.getHeaderList();

获取页眉里的所有段落:List paras = header.getParagraphs();

获取页眉里的所有表格:List tables = header.getTables();

之后就一样了

4、页脚:

页脚和页眉基本类似,可以获取表示页数的角标

 

 

 

言归正传-------干货:

1、通过XWPFDocument读:段落+表格

 

a、获取文档的所有段落

InputStream is = new FileInputStream("D:\\table.docx"); XWPFDocument doc = new XWPFDocument(is); List paras = doc.getParagraphs();

 

获取段落内容

for (XWPFParagraph para : paras) { //当前段落的属性 //CTPPr pr = para.getCTP().getPPr(); System.out.println(para.getText()); }

b、获取文档中所有的表格  

List tables = doc.getTables(); List rows; List cells; for (XWPFTable table : tables) { //表格属性 CTTblPr pr = table.getCTTbl().getTblPr(); //获取表格对应的行 rows = table.getRows(); for (XWPFTableRow row : rows) { //获取行对应的单元格 cells = row.getTableCells(); for (XWPFTableCell cell : cells) { System.out.println(cell.getText());; } } }

2、XWPFDocument生成word

 

直接new一个空的XWPFDocument,之后再往这个XWPFDocument里面填充内容,然后再把它写入到对应的输出流中。

新建一个文档

XWPFDocument doc = new XWPFDocument(); //创建一个段落 XWPFParagraph para = doc.createParagraph(); //一个XWPFRun代表具有相同属性的一个区域:一段文本 XWPFRun run = para.createRun(); run.setBold(true); //加粗 run.setText("加粗的内容"); run = para.createRun(); run.setColor("FF0000"); run.setText("红色的字。"); OutputStream os = new FileOutputStream("D:\\simpleWrite.docx"); //把doc输出到输出流 doc.write(os); this.close(os);

新建一个表格

//XWPFDocument doc = new XWPFDocument(); //创建一个5行5列的表格 XWPFTable table = doc.createTable(5, 5); //这里增加的列原本初始化创建的那5行在通过getTableCells()方法获取时获取不到,但通过row新增的就可以。 //table.addNewCol(); //给表格增加一列,变成6列 table.createRow(); //给表格新增一行,变成6行 List rows = table.getRows(); //表格属性 CTTblPr tablePr = table.getCTTbl().addNewTblPr(); //表格宽度 CTTblWidth width = tablePr.addNewTblW(); width.setW(BigInteger.valueOf(8000)); XWPFTableRow row; List cells; XWPFTableCell cell; int rowSize = rows.size(); int cellSize; for (int i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有