POI解析Word中文API
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();
之后和正文段落一样
注:
- 表格的一格相当于一个完整的docx文档,只是没有页眉和页脚。里面可以有表格,使用xwpfTableCell.getTables()获取,and so on
- 在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相关推荐
- Java POI解析Word提取数据存储在Excel
JavaPOI解析word提取数据到excel 一.了解POI POI以前有了解,这次需求是解析word读取其中标题,还有内容赛选获取自己想要的内容 经过两天的学习,开始熟悉Java这么读取word和 ...
- 如何使用poi解析word生成html目录结构
POI解析word目录结构 简介说明 认识下Word 我们先看下doc版本的word 我们再看下docx版本的word(今天的主角) 目录解析的原理介绍 写word文档时,我们是怎么设置目录? 我们看 ...
- poi解析word文档(解析表格,emf,wmf,svg转jpg图片)
POI解析word文档 poi解析word的表格: 提前先准备需要的jar包: <!-- poi --><dependency><groupId>org.a ...
- poi解析word中的表格
解析word简历,使用poi解析word表格研究记录如下: package poi;import java.io.File; import java.io.FileInputStream; impor ...
- poi操作 excel 中文API文档
poi操作 excel 中文API文档 依赖: <dependency><groupId>org.apache.poi</groupId><artifactI ...
- java如何解析word大纲_Java POI 解析word文档
实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...
- POI解析Word批注信息
前言:报告审批后,要求解析Word批注信息获取 作者.引用正文.批注内容 等信息入库,我这边额外加了回复对象(为后续考虑) 先上代码吧: /*** @author : weiheng* @versio ...
- 关于poi解析word 2007版docx问题
最近因工作需要使用java解析word 2007 .docx文档,电脑上用的office版本是未激活的office,保存打开编辑都没有问题,但是使用poi来读取数据时,却提示 而使用WPS和正版的Of ...
- java 导出word 乱码问题,如何解决POI生成WORD中文乱码问题?
需求:因为系统用户需要把合同,产品,证书导出WORD. 设计:写好合同,产品,证书的模板,然后读取模板,写入WORD,最后弹出窗口让用户保存. 我写了二个方法,但是感觉方法一对以后的表单问题不能解决, ...
最新文章
- java中字节_java中的变量各占得字节数
- 洛谷 P3378 【模板】堆
- 构造函数不能为虚函数
- STL15-map/multimap容器
- grayscale实现全站及局部变黑的效果 – 兼容IE/FF等浏览器
- -函数-MATLAB提供的函数/主子函数/匿名-嵌套函数
- 原来iPhone手机还能自动清理垃圾!简单几步,就能多出几个G内存
- 总结oninput、onchange与onpropertychange事件的用法和区别
- android 修改以太网mac地址_Android5.1修改以太网MAC地址(SElinux)
- python复制上一条语句快捷键_pycharm快捷键及一些常用设置
- 【DB2】查询上月末、上年末、上年同期等信息
- 如何将mov转换成mp4?详细的步骤分享
- Vue实现 TodoList
- java禁止夏令时_在指定时区导入日期时间,忽略夏令时
- 郁亮的“权力游戏”,万科的“内外战争”
- 国外服务器https协议,AriaNg使用Https/WebSocket(安全)协议连接Aria2的方法
- 某计算机机房的上机控制电路,2012年南京市單招计算机专业教学调研测试卷一1.doc...
- 拒酒词、与领导喝酒的诀窍、酒量不行的技巧
- C语言代码实现卡塔尔世界杯球员管理系统
- 压缩包文件如何将密码找回来
热门文章
- 流星汇聚:跨境电商几大主流电商平台势均力敌,卖家如何选择?
- 清华2020计算机系张晨,清华公布2020特奖候选人名单!平均21岁,还有一姚班大神...
- VBA学习笔记5:将同一工作簿的数据按照类别拆分为多个工作簿
- nuke 8.0v3 强劲的视觉特效合成软件 linux,Nuke8.0
- 阳光旅行网app中用户下单功能,《使用Java实现面向对象编程》内部测试机试题
- 运筹优化(一)--运筹学概述
- 视频去水印免费软件有哪些?视频去水印软件大分享
- 数字化时代,企业整体信息化建设管理解决方案如何定制打造?
- 工信部官网首次公布虚商服务质量问题
- lammps案例:空位形成能的模拟与计算