JAVA獲取word表格中數據的方案

上一個項目的開發中須要實現從word中讀取表格數據的功能,在JAVA社區搜索了不少資料,終於找到了兩個相對最佳的方案,由於也獲得了很多網友們的幫助,因此不敢獨自享用,在此作一個分享。服務器

        兩個方案分別是:一,用POI的TableIterator獲取表格中的數據;二,用PageOffice來獲取。架構

  爲何說是兩個相對最佳的方案呢?由於兩個方案都各有優缺點,POI的優勢很明顯,就是免費,這正是PageOffice的缺點,PageOffice是一個國產的商業Office組件;POI的缺點有點多,接口複雜調用起來比較麻煩,尤爲是很差讀取word指定位置處的內容。因爲獲取表格數據的代碼是在服務器端執行的,因此要求很高的代碼質量,要考慮到代碼執行效率問題、用戶請求併發問題、大文檔執行慢阻塞頁面的問題等等,POI的架構屬於仿VBA接口的模型,比VBA代碼還要複雜,在調用方便上未作任何優化,光看代碼都以爲頭疼。因此在實際使用的過程當中會遇到這些問題須要本身解決,相對來講這正是PageOffice的優勢,使用PageOffice的話,就不會遇到這些問題,由於PageOffice的獲取word中表格數據的工做是在客戶端執行的,確實也符合了分佈式計算思想,減輕服務器端壓力,還有個強悍的功能,PageOffice能夠從word表格中用很簡單一句代碼把圖片提取出來!!!併發

  PageOffice雖是收費的,可是事半功倍,並且還能實現許多POI沒法實現的功能。若是確實預算緊張,仍是須要用POI,再難用也要捏着鼻子用了……,閒話少撤,看代碼實現。分佈式

  PageOffice獲取word表格中數據的核心代碼:優化

WordDocument doc = new WordDocument(request,response);
    DataRegion dataReg = doc.openDataRegion("PO_table");
    Table table = dataReg.openTable(1);
    String cellValue = table.openCellRC(1,2).getValue(); //獲取書籤「PO_table」中表格里第1行第2列單元格的值
    doc.close();

  以上代碼是從例子代碼裏拷貝出來的,能夠從PageOffice的官網下載中心下載「PageOffice for JAVA 」,把PageOffice開發包裏的Samples4運行起來,看示例(2、1六、獲取Word文件中表格的數據)裏面的具體代碼和實現效果。接口

  須要說明一點,PageOffice中提到了一個數據區域(DataRegion)的概念,其實所謂的數據區域本質上就是書籤,可是這個書籤必須以「PO_」 開頭。把表格放到數據區域中貌似不方便,可是好處很大,若是word文件中有多個表格的話,能夠用數據區域去指定PageOffice獲取word中哪一個表格的數據,定位很是方便,比方說PO_Table的書籤裏有一個表格,那麼無論這個表格在整個word文件中是第幾個表(word中的表格沒有名稱只有Index,從文件頭到末尾依次編號的)用doc.openDataRegion("PO_table").openTable(1);老是能夠獲取到這個表格的數據,很是方便,用POI就不行了,表格、圖片位置移動,代碼必須重寫。
  就寫這麼多吧,作個共享,但願對你們都有幫助。圖片

相關文章
相關標籤/搜索