比较容易做流量的网站,设计模板素材网站,新产品开发8个步骤,开公司建网站本文转载自微信公众号「JAVA日知录」#xff0c;作者单一色调。转载本文请联系JAVA日知录公众号。不能每天都发鸡汤呀#xff0c;今天分享一篇开发实战。业务需求我们有这样一个需求#xff0c;需要抽取出WORD文档中的内容#xff0c;然后组装成特定的json格式发送给第三方…本文转载自微信公众号「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格式段落文档的时候会把表格内容也读取出来所以我们需要用如下方法排除掉表格//读取docHWPFDocument doc new HWPFDocument(stream);Range range doc.getRange();//读取段落intnum range.numParagraphs();Paragraph para;for(inti0; ipara range.getParagraph(i);//排除表格内容if (!para.isInTable()) {System.out.println(para.text());}}考虑以上两种原因我们最后并没有采取POI来实现word内容提取功能而是采用第二种方法即利用 Spire.Doc for Java 来实现。Spire.Doc for JavaSpire.Doc for Java 是一款专业的 Java Word 组件开发人员使用它可以轻松地将 Word 文档创建、读取、编辑、转换和打印等功能集成到自己的 Java 应用程序中。作为一款完全独立的组件Spire.Doc for Java 的运行环境无需安装 Microsoft Office。官网地址是 https://www.e-iceblue.cn/我们项目中使用的开源免费版。首先我们修改maven仓库地址com.e-icebluehttp://repo.e-iceblue.com/nexus/content/groups/public/引入对应的jar包e-icebluespire.doc.free3.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 rowstable.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