业务需求

我们有这样一个需求,需要抽取出WORD文档中的内容,然后组装成特定的json格式发送给第三方引擎接口,输入协议如下:

{

"tables": [

{

"cells": [

{

"col": 1,

"row_span": 1,

"row": 1,

"col_span": 1,

"content": "车辆名称"

}

],

"id": 0,

"row_num": 2

}

],

"paragraps": [

{

"para_id": 1,

"content": "Hello,JAVA日知录"

}

]

}

这个输入格式一看就是需要我们分段落和表格读取word中的内容,既然需求已定,那就直接开始动手写代码吧。

基于POI实现

把 “java如何读取word” 拿到百度去搜索,答案基本都是利用POI来实现。当然利用POI确实可以实现按段落和表格提取出内容并组装成上述格式,但是在实践过程中有下面2个问题:

需要分别处理两种格式docx、doc

POI使用不同的API来读取docx和doc,所以读取逻辑我们需要编写两次。

POI读取doc的段落时会把表格的内容也读取出来

这个问题比较坑,poi有单独的方法读取文档中所有表格,但是在读取doc格式段落文档的时候会把表格内容也读取出来,所以我们需要用如下方法排除掉表格:

//读取doc

HWPFDocument doc = new HWPFDocument(stream);

Range range = doc.getRange();

//读取段落

int num = range.numParagraphs();

Paragraph para;

for (int i=0; i

para = range.getParagraph(i);

//排除表格内容

if (!para.isInTable()) {

System.out.println(para.text());

}

}

考虑以上两种原因,我们最后并没有采取POI来实现word内容提取功能,而是采用第二种方法,即利用Spire.Doc for Java来实现。

Spire.Doc for Java

Spire.Doc for Java 是一款专业的 Java Word 组件,开发人员使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程序中。作为一款完全独立的组件,Spire.Doc for Java 的运行环境无需安装 Microsoft Office。 官网地址是 https://www.e-iceblue.cn/,我们项目中使用的开源免费版。

首先我们修改maven仓库地址

com.e-iceblue

http://repo.e-iceblue.com/nexus/content/groups/public/

引入对应的jar包

e-iceblue

spire.doc.free

3.9.0

读取word,这里展示的是测试类

public class SpireApplication {

public static void main(String[] args) {

String path = "D:\\testDoc22.doc";

spireParaghDoc(path);

spireForTableOfDoc(path);

}

//读取段落

public static void spireParaghDoc(String path) {

Document doc = new Document(path);

for (int i = 0; i < doc.getSections().getCount(); i++) {

Section section = doc.getSections().get(i);

for (int j = 0; j < section.getParagraphs().getCount(); j++) {

Paragraph paragraph = section.getParagraphs().get(j);

System.out.println(paragraph.getText());

}

}

}

//读取表格

public static void spireForTableOfDoc(String path) {

Document doc = new Document(path);

for (int i = 0; i < doc.getSections().getCount(); i++) {

Section section = doc.getSections().get(i);

for (int j = 0; j < section.getBody().getChildObjects().getCount(); j++) {

DocumentObject obj = section.getBody().getChildObjects().get(j);

if (obj.getDocumentObjectType() == DocumentObjectType.Table) {

Table table = (Table) obj;

for (int k = 0; k < table.getRows().getCount(); k++) {

TableRow rows = table.getRows().get(k);

for (int p = 0; p < rows.getCells().getCount(); p++) {

for (int h = 0; h < rows.getCells().get(p).getParagraphs().getCount(); h++) {

Paragraph f = rows.getCells().get(p).getParagraphs().get(h);

System.out.println(f.getText());

}

}

}

}

}

}

}

}

通过上面代码我们就可以按段落和表格读取WORD中的内容,而后根据系统业务要求的格式进行封装即可。

java 读取word 表格,实战 | JAVA读取WORD,包含表格。相关推荐

  1. java word搜索,实战 | Java读取Word,包含表格!

    本文转载自微信公众号「JAVA日知录」,作者单一色调.转载本文请联系JAVA日知录公众号. 不能每天都发鸡汤呀,今天分享一篇开发实战. 业务需求 我们有这样一个需求,需要抽取出WORD文档中的内容,然 ...

  2. POI替换word中的指定文字(包含表格,表格中有回车)

    网上可以找到很多POI替换Word中指定文字的代码,然而基本上都没有对文档中的表格中包含的段落(回车)进行处理.自己写了,代码记录如下: /** * *@templetStream 文档的输入流 *@ ...

  3. html 表格_UiPath之发送正文包含表格的邮件(通过Html实现表格)

    我们在日常工作中,经常需要把整理好的表格,复制粘贴到邮件的正文中,那么怎样通过UiPath来实现带有表格内容的邮件正文. 本次内容所要用到的Activities有: ReadRange---获取数据源 ...

  4. JAVA table word,实战 | Java读取Word,包含表格!

    本文转载自微信公众号「JAVA日知录」,作者单一色调.转载本文请联系JAVA日知录公众号. 不能每天都发鸡汤呀,今天分享一篇开发实战. 业务需求 我们有这样一个需求,需要抽取出WORD文档中的内容,然 ...

  5. java word文本框_Java 读取Word文本框中的文本、图片、表格

    Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...

  6. Java读取word文档里的复杂型表格(任免表)

    使用apache-poi读取word文档里的复杂型表格 这里使用的任免表编辑器产生的word文档. word模板:https://download.csdn.net/download/weixin_4 ...

  7. java获取word书签表格数据_Python读取word文档里面的表格数据

    更多精彩,请点击上方蓝字关注我们! 我们常见的办公数据通常可以分为结构化数据与非结构化数据,比如常见的word, ppt, excel.前两者存储的是非结构化数据,excel存储的是结构化数据.从事数 ...

  8. java读取带格式word文档_Java读取word文档解决方案

    java读取word文档时,虽然网上介绍了很多插件poi.java2Word.jacob.itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用):java ...

  9. java 读取word 带格式_java读取word带格式_游戏下载_游戏攻略资讯_尽在搜狗爱玩

    Started learning Java and think you're ready to move on to the next level? Find out if you have a go ...

最新文章

  1. 机器视觉之医学诊断应用
  2. 35 岁前程序员要规划好的四件事(转载)
  3. 如何利用CIC滤波器、CIC补偿滤波器和半带滤波器设计一个高频数字抽取滤波器
  4. 在Red Hat Linux中自动运行程序
  5. mac下idea 13 在tomcat 7控制台乱码
  6. 只用半小时,只用半小时,只用半小时,给自己一个机会,看完保你web开发一期末不挂科,老师看了都说好
  7. SpringCloud(二) 服务注册与发现Eureka
  8. php sha1漏洞,PHP sha1()函数
  9. swift中_的用法,忽略默认参数名。
  10. 凸优化有关的数值线性代数知识三:LU Cholesky和LDL因式分解
  11. 实施工程师是干嘛的_CTO大怒:300万建设数据中台,啥也没看见,我要它干嘛?...
  12. 微信小程序项目实例——打卡时钟
  13. 2018年腾讯社交广告大赛复习总贴
  14. “人类高质量数据”如何训练计算机视觉模型?
  15. 如何使用测试仪进行400G交换机性能测试
  16. 计算机毕业设计django基于python企业资产管理系统
  17. 3D,点云分割,不要割个寂寞
  18. Titan 的设计与实现
  19. Unity Shader:Unity网格(1)---顶点,三角形朝向,法线,uv,以及双面渲染三角形
  20. 关于永磁同步电机d-q轴定子电压方程中反电势项的符号问题。

热门文章

  1. opencv 最大连通域_opencv 查找连通区域 最大面积
  2. Android 计算屏幕尺寸
  3. 在线培训网校系统,解决了课程的计时消课问题
  4. 7-15 说反话-加强版 (20 分)#
  5. 微信搜索不到小程序名字?微信小程序搜索不到应用怎么办?微信小程序怎么搜索?
  6. MySQL数据库综合练习4
  7. 【差异分析】蓝牙4.0 vs 蓝牙4.1 vs 蓝牙4.2 vs 蓝牙5.0
  8. 华为与WorldRemit达成协议:在非洲可以使用手机进行转账
  9. 模拟芯片和数字芯片的比较
  10. ubuntu20.04玩植物大战僵尸95版