https://yq135314.iteye.com/blog/1538182

POI操作word文档的两个主要模块就是HWPF和XWPF。
HWPF是操作Microsoft Word 97(-2007)文件的标准API入口。它还支持对旧版Word 6和Word 95文件对有限的只读功能。
XWPF是操作Microsoft Word 2007文件的标准API入口。

https://www.cnblogs.com/mh-study/p/9747945.html

https://blog.csdn.net/robinliu2010/article/details/7584173


Poi之Word文档结构介绍

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();

之后和正文段落一样

注:

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

3、poi之word文档结构介绍之页眉:

一个文档可以有多个页眉(不知道怎么会有多个页眉。。。),页眉里面可以包含段落和表格

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

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

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

之后就一样了

4、poi之word文档结构介绍之页脚:

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


https://elim.iteye.com/blog/2049110

POI在读写word docx文件时是通过xwpf模块来进行的,其核心是XWPFDocument。一个XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档。XWPFDocument中主要包含下面这几种对象:

l XWPFParagraph:代表一个段落。

l XWPFRun:代表具有相同属性的一段文本。

l XWPFTable:代表一个表格。

l XWPFTableRow:表格的一行。

l XWPFTableCell:表格对应的一个单元格。

1 读docx文件

跟读doc文件一样,POI在读docx文件的时候也有两种方式,通过XWPFWordExtractor和通过XWPFDocument。在XWPFWordExtractor读取信息时其内部还是通过XWPFDocument来获取的。

1.1 通过XWPFWordExtractor读

在使用XWPFWordExtractor读取docx文档的内容时,我们只能获取到其文本,而不能获取到其文本对应的属性值。下面是一段使用XWPFWordExtractor来读取docx文档内容的示例代码:

public class XwpfTest {  /** * 通过XWPFWordExtractor访问XWPFDocument的内容 * @throws Exception */  @Test  public void testReadByExtractor() throws Exception {  InputStream is = new FileInputStream("D:\\test.docx");  XWPFDocument doc = new XWPFDocument(is);  XWPFWordExtractor extractor = new XWPFWordExtractor(doc);  String text = extractor.getText();  System.out.println(text);  CoreProperties coreProps = extractor.getCoreProperties();  this.printCoreProperties(coreProps);  this.close(is);  }  /** * 输出CoreProperties信息 * @param coreProps */  private void printCoreProperties(CoreProperties coreProps) {  System.out.println(coreProps.getCategory());   //分类  System.out.println(coreProps.getCreator()); //创建者  System.out.println(coreProps.getCreated()); //创建时间  System.out.println(coreProps.getTitle());   //标题  }  /** * 关闭输入流 * @param is */  private void close(InputStream is) {  if (is != null) {  try {  is.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  

1.2 通过XWPFDocument读

在通过XWPFDocument读取docx文档时,我们就可以获取到文本比较精确的属性信息了。比如我们可以获取到某一个XWPFParagraph、XWPFRun或者是某一个XWPFTable,包括它们对应的属性信息。下面是一个使用XWPFDocument读取docx文档的示例:

public class XwpfTest {  /** * 通过XWPFDocument对内容进行访问。对于XWPF文档而言,用这种方式进行读操作更佳。 * @throws Exception */  @Test  public void testReadByDoc() throws Exception {  InputStream is = new FileInputStream("D:\\table.docx");  XWPFDocument doc = new XWPFDocument(is);  List<XWPFParagraph> paras = doc.getParagraphs();  for (XWPFParagraph para : paras) {  //当前段落的属性
//       CTPPr pr = para.getCTP().getPPr();  System.out.println(para.getText());  }  //获取文档中所有的表格  List<XWPFTable> tables = doc.getTables();  List<XWPFTableRow> rows;  List<XWPFTableCell> 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());;  }  }  }  this.close(is);  }  /** * 关闭输入流 * @param is */  private void close(InputStream is) {  if (is != null) {  try {  is.close();  } catch (IOException e) {  e.printStackTrace();  }  }  }  }  

写Word:
http://doc.okbase.net/oh_Maxy/archive/154764.html

POI解析Word中文API相关推荐

  1. Java POI解析Word提取数据存储在Excel

    JavaPOI解析word提取数据到excel 一.了解POI POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容 经过两天的学习,开始熟悉Java这么读取word和 ...

  2. 如何使用poi解析word生成html目录结构

    POI解析word目录结构 简介说明 认识下Word 我们先看下doc版本的word 我们再看下docx版本的word(今天的主角) 目录解析的原理介绍 写word文档时,我们是怎么设置目录? 我们看 ...

  3. poi解析word文档(解析表格,emf,wmf,svg转jpg图片)

    POI解析word文档 poi解析word的表格:   提前先准备需要的jar包:   <!-- poi --><dependency><groupId>org.a ...

  4. poi解析word中的表格

    解析word简历,使用poi解析word表格研究记录如下: package poi;import java.io.File; import java.io.FileInputStream; impor ...

  5. poi操作 excel 中文API文档

    poi操作 excel 中文API文档 依赖: <dependency><groupId>org.apache.poi</groupId><artifactI ...

  6. java如何解析word大纲_Java POI 解析word文档

    实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...

  7. POI解析Word批注信息

    前言:报告审批后,要求解析Word批注信息获取 作者.引用正文.批注内容 等信息入库,我这边额外加了回复对象(为后续考虑) 先上代码吧: /*** @author : weiheng* @versio ...

  8. 关于poi解析word 2007版docx问题

    最近因工作需要使用java解析word 2007 .docx文档,电脑上用的office版本是未激活的office,保存打开编辑都没有问题,但是使用poi来读取数据时,却提示 而使用WPS和正版的Of ...

  9. java 导出word 乱码问题,如何解决POI生成WORD中文乱码问题?

    需求:因为系统用户需要把合同,产品,证书导出WORD. 设计:写好合同,产品,证书的模板,然后读取模板,写入WORD,最后弹出窗口让用户保存. 我写了二个方法,但是感觉方法一对以后的表单问题不能解决, ...

最新文章

  1. java中字节_java中的变量各占得字节数
  2. 洛谷 P3378 【模板】堆
  3. 构造函数不能为虚函数
  4. STL15-map/multimap容器
  5. grayscale实现全站及局部变黑的效果 – 兼容IE/FF等浏览器
  6. -函数-MATLAB提供的函数/主子函数/匿名-嵌套函数
  7. 原来iPhone手机还能自动清理垃圾!简单几步,就能多出几个G内存
  8. 总结oninput、onchange与onpropertychange事件的用法和区别
  9. android 修改以太网mac地址_Android5.1修改以太网MAC地址(SElinux)
  10. python复制上一条语句快捷键_pycharm快捷键及一些常用设置
  11. 【DB2】查询上月末、上年末、上年同期等信息
  12. 如何将mov转换成mp4?详细的步骤分享
  13. Vue实现 TodoList
  14. java禁止夏令时_在指定时区导入日期时间,忽略夏令时
  15. 郁亮的“权力游戏”,万科的“内外战争”
  16. 国外服务器https协议,AriaNg使用Https/WebSocket(安全)协议连接Aria2的方法
  17. 某计算机机房的上机控制电路,2012年南京市單招计算机专业教学调研测试卷一1.doc...
  18. 拒酒词、与领导喝酒的诀窍、酒量不行的技巧
  19. C语言代码实现卡塔尔世界杯球员管理系统
  20. 压缩包文件如何将密码找回来

热门文章

  1. 流星汇聚:跨境电商几大主流电商平台势均力敌,卖家如何选择?
  2. 清华2020计算机系张晨,清华公布2020特奖候选人名单!平均21岁,还有一姚班大神...
  3. VBA学习笔记5:将同一工作簿的数据按照类别拆分为多个工作簿
  4. nuke 8.0v3 强劲的视觉特效合成软件 linux,Nuke8.0
  5. 阳光旅行网app中用户下单功能,《使用Java实现面向对象编程》内部测试机试题
  6. 运筹优化(一)--运筹学概述
  7. 视频去水印免费软件有哪些?视频去水印软件大分享
  8. 数字化时代,企业整体信息化建设管理解决方案如何定制打造?
  9. 工信部官网首次公布虚商服务质量问题
  10. lammps案例:空位形成能的模拟与计算