本文转载自微信公众号「JAVA日知录」,作者单一色调。转载本文请联系JAVA日知录公众号。

不能每天都发鸡汤呀,今天分享一篇开发实战。

业务需求

我们有这样一个需求,需要抽取出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、docPOI使用不同的API来读取docx和doc,所以读取逻辑我们需要编写两次。

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

//读取doc

HWPFDocument doc = new HWPFDocument(stream);

Range range = doc.getRange();

//读取段落

intnum = range.numParagraphs();

Paragraph para;

for(inti=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,这里展示的是测试类

publicclass SpireApplication {

publicstaticvoid main(String[] args) {

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

spireParaghDoc(path);

spireForTableOfDoc(path);

}

//读取段落

publicstaticvoid spireParaghDoc(String path) {

Document doc = new Document(path);

for(inti = 0; i

Sectionsection= doc.getSections().get(i);

for(intj = 0; j

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

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

}

}

}

//读取表格

publicstaticvoid spireForTableOfDoc(String path) {

Document doc = new Document(path);

for(inti = 0; i

Sectionsection= doc.getSections().get(i);

for(intj = 0; j

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

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

Tabletable= (Table) obj;

for(intk = 0; k

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

for(intp = 0; p

for(inth = 0; h

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

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

}

}

}

}

}

}

}

}

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

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

JAVA table word,实战 | Java读取Word,包含表格!相关推荐

  1. php识别word语言,PHP读取word文档

    在PHP中读取和写入WORD文档的代码 php // 建立一个指向新COM组件的索引 $word = new COM("word.application") or die(&quo ...

  2. 视频教程-Java并发编程实战-Java

    Java并发编程实战 2018年以超过十倍的年业绩增长速度,从中高端IT技术在线教育行业中脱颖而出,成为在线教育领域一匹令人瞩目的黑马.咕泡学院以教学培养.职业规划为核心,旨在帮助学员提升技术技能,加 ...

  3. 视频教程-JAVA WEB开发实战-Java

    JAVA WEB开发实战 主要研究方向为J2EE..net .数据库 .前端.Android,曾经服务过大型上市国企IT部门,软件企业联合创始人,对软件研发管理.市场营销有自己独特思想体系! 张晨光 ...

  4. python导入word转换的html,python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

  5. java如何解析word大纲_java读取word并解析

    java POI3.8处理word模板,文字 图片 表格 将word模板里面的特殊标签换成 文字,图片, 以下是处理的代码 特殊标签最好的复制粘贴到word模板里面 ,因为手动敲入可能有点小的差别都导 ...

  6. php读取word格式,php读取word格式 phpword 读取word内容

    PHP怎么读取WORD文档 传就传吧,后台传什么文件都可以,原样保留在文件夹下面就行了,天台的直接指向它,只要前台安装了相应的程序就能打开,例如指向一个WORD的代码可以是:你可能觉得这样很不好,前台 ...

  7. python怎么重命名word文件,Python读取word文本操作详解

    本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...

  8. c语言如何自动生成word,C语言读取word文档的方法

    C语言读取word文档的方法 第一种方法: 复制代码 代码如下: Response.ClearContent(); Response.ClearHeaders(); Response.ContentT ...

  9. python 合并word文件_python读取word合并单元格

    在excel中,合并.拆分单元格是经常会用到的.而在word文档中,偶尔我们也需要插入表格,然后编辑表格,那么如何对word中的表格单元格进行合并.拆分呢? 一.如何在word中创建表格 1.选择&q ...

最新文章

  1. 判断手势_手势密码有几种?
  2. Android App的架构设计:从VM、MVC、MVP到MVVM
  3. 除手机平板PC外 华为终端明年全线搭载鸿蒙系统
  4. 问题三十六:ray tracing中的Inverse Mapping(1)——球面Inverse Mapping
  5. 德江多措施推进大数据应用“智慧德江”建设
  6. linux批量配置文件,linux下根据用户输入批量修改配置文件ip
  7. c语言用数组实现大数加减,c语言版大数计算器(实现大数的加减乘除运算,已更新源代码)...
  8. 计算机考研 外部排序,2021考研408数据结构基础知识点:外部排序
  9. Ring buffer streaming in general - how to imple...
  10. KEIL MDK平台 S3C2440 C语言软件仿真
  11. 内存测试拷机软件,烤机软件 OCCT 更新 9.0.0 版本,新增 CPU/内存跑分测试
  12. html 隐藏广告代码,js漂浮广告原理 js或者CSS带关闭的漂浮广告代码
  13. java 独木桥_Java实现洛谷 P1007独木桥
  14. ChatGPT实现代码生成
  15. 飞机大战h5微信小游戏代码
  16. 线性回归统计指标 SSE、MSE、RMSE、MAE、R-square
  17. mysql 集合 思想_面向集合的思维编写SQL(第九篇 --- “我说的是:苹果柿子李子栗子梨的那个橘子啊”)...
  18. Integer关于equals与==的比较(自动拆装箱技术和常量池技术)
  19. 真静态与伪静态的区别,伪静态的实现原理及简单使用
  20. 程序员你确定这十个题你都会吗?

热门文章

  1. CF16A Flag
  2. nodejs+kafka+storm+hbase 开发
  3. 使用 JavaScript 实现简单候选项推荐功能(模糊搜索)【收藏】【转】
  4. 浅析C#的事件处理和自定义事件
  5. ASP。NET的设计思想
  6. linux的系统移植——uboot常用命令
  7. 【剑指offer】面试题16:数值的整数次方(Java)
  8. Leetcode--264. 丑数Ⅱ
  9. java dct变换_Discrete Cosine Transform [DCT] (离散余弦变换)
  10. 一个神奇的测试_这4个在线黑科技工具拥有神奇的魔法,值得收藏!