赞
踩
最近工作需要用到,所以记录下来以便查找。
POI读写word使用的核心类是XWPFDocument。一个XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档。
主要包含下面这几种对象:
引用一段写的很好的结构说明:
1、poi之word文档结构介绍之正文段落
一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run,Run是文档的最小单元
获取所有段落:
List<XWPFParagraph> paragraphs = word.getParagraphs();
获取一个段落中的所有Runs:
List<XWPFRun> xwpfRuns = xwpfParagraph.getRuns();
获取一个Runs中的一个Run:
XWPFRun run = xwpfRuns.get(index);
2、poi之word文档结构介绍之正文表格
一个文档包含多个表格,一个表格包含多行,一行包含多列(格),每一格的内容相当于一个完整的文档
获取所有表格:
List<XWPFTable> xwpfTables = doc.getTables();
获取一个表格中的所有行:
List<XWPFTableRow> xwpfTableRows = xwpfTable.getRows();
获取一行中的所有列:
List<XWPFTableCell> xwpfTableCells = xwpfTableRow.getTableCells();
获取一格里的内容:
List<XWPFParagraph> paragraphs = xwpfTableCell.getParagraphs();
之后和正文段落一样
注:
- 表格的一格相当于一个完整的docx文档,只是没有页眉和页脚。里面可以有表格,使用
xwpfTableCell.getTables()
获取。- 在poi文档中段落和表格是完全分开的,如果在两个段落中有一个表格,在poi中是没办法确定表格在段落中间的。(当然除非你本来知道了,这句是废话)。只有文档的格式固定,才能正确的得到文档的结构
3、poi之word文档结构介绍之页眉:
一个文档可以有多个页眉(不知道怎么会有多个页眉。。。),页眉里面可以包含段落和表格
获取文档的页眉:
List<XWPFHeader> headerList = doc.getHeaderList();
获取页眉里的所有段落:
List<XWPFParagraph> paras = header.getParagraphs();
获取页眉里的所有表格:
List<XWPFTable> tables = header.getTables();
之后就一样了
4、poi之word文档结构介绍之页脚:
页脚和页眉基本类似,可以获取表示页数的角标
先使用代码去达到对word的读和写。
编写一个word文档如下:
源文件地址:
/** * @Description 测试读取word文件 * @Author hacah * @Date 2021/6/15 14:45 */ public static void testReadWord() throws IOException { // 填写输入流 XWPFDocument xwpfDocument = new XWPFDocument(new FileInputStream("E:\\OneDrive\\文档\\自我介绍.docx")); // 获取文本数据 List<XWPFParagraph> paragraphs = xwpfDocument.getParagraphs(); for (XWPFParagraph paragraph : paragraphs) { for (XWPFRun run : paragraph.getRuns()) { System.out.println(run.text()); } } // 获取表格数据 List<XWPFTable> tables = xwpfDocument.getTables(); for (XWPFTable table : tables) { List<XWPFTableRow> rows = table.getRows(); for (XWPFTableRow row : rows) { List<XWPFTableCell> tableCells = row.getTableCells(); for (XWPFTableCell tableCell : tableCells) { List<XWPFParagraph> paragraphs1 = tableCell.getParagraphs(); for (XWPFParagraph xwpfParagraph : paragraphs1) { List<XWPFRun> runs = xwpfParagraph.getRuns(); for (XWPFRun run : runs) { System.out.println(run
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。