本篇文章給大家分享的是有關(guān)怎么用Java讀取Word包含表格,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
十余年的鐵西網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整鐵西建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“鐵西網(wǎng)站設(shè)計(jì)”,“鐵西網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
本文轉(zhuǎn)載自微信公眾號(hào)「JAVA日知錄」,作者單一色調(diào)。轉(zhuǎn)載本文請(qǐng)聯(lián)系JAVA日知錄公眾號(hào)。
不能每天都發(fā)雞湯呀,今天分享一篇開發(fā)實(shí)戰(zhàn)。
業(yè)務(wù)需求
我們有這樣一個(gè)需求,需要抽取出WORD文檔中的內(nèi)容,然后組裝成特定的json格式發(fā)送給第三方引擎接口,輸入?yún)f(xié)議如下:
{ "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日知錄" } ] }
這個(gè)輸入格式一看就是需要我們分段落和表格讀取word中的內(nèi)容,既然需求已定,那就直接開始動(dòng)手寫代碼吧。
基于POI實(shí)現(xiàn)
把 “java如何讀取word” 拿到百度去搜索,答案基本都是利用POI來實(shí)現(xiàn)。當(dāng)然利用POI確實(shí)可以實(shí)現(xiàn)按段落和表格提取出內(nèi)容并組裝成上述格式,但是在實(shí)踐過程中有下面2個(gè)問題:
需要分別處理兩種格式docx、docPOI使用不同的API來讀取docx和doc,所以讀取邏輯我們需要編寫兩次。
POI讀取doc的段落時(shí)會(huì)把表格的內(nèi)容也讀取出來 這個(gè)問題比較坑,poi有單獨(dú)的方法讀取文檔中所有表格,但是在讀取doc格式段落文檔的時(shí)候會(huì)把表格內(nèi)容也讀取出來,所以我們需要用如下方法排除掉表格:
//讀取doc HWPFDocument doc = new HWPFDocument(stream); Range range = doc.getRange(); //讀取段落 int num = range.numParagraphs(); Paragraph para; for (int i=0; i考慮以上兩種原因,我們最后并沒有采取POI來實(shí)現(xiàn)word內(nèi)容提取功能,而是采用第二種方法,即利用 Spire.Doc for Java 來實(shí)現(xiàn)。
Spire.Doc for Java
Spire.Doc for Java 是一款專業(yè)的 Java Word 組件,開發(fā)人員使用它可以輕松地將 Word 文檔創(chuàng)建、讀取、編輯、轉(zhuǎn)換和打印等功能集成到自己的 Java 應(yīng)用程序中。
作為一款完全獨(dú)立的組件,Spire.Doc for Java 的運(yùn)行環(huán)境無需安裝 Microsoft Office。官網(wǎng)地址是 https://www.e-iceblue.cn/,我們項(xiàng)目中使用的開源免費(fèi)版。
首先我們修改maven倉庫地址
com.e-iceblue http://repo.e-iceblue.com/nexus/content/groups/public/ 引入對(duì)應(yīng)的jar包
e-iceblue spire.doc.free 3.9.0 讀取word,這里展示的是測(cè)試類
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中的內(nèi)容,而后根據(jù)系統(tǒng)業(yè)務(wù)要求的格式進(jìn)行封裝即可。
以上就是怎么用Java讀取Word包含表格,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站題目:怎么用Java讀取Word包含表格
本文網(wǎng)址:http://weahome.cn/article/gcgoip.html