上一個項目的開發中需要實現從word中讀取表格數據的功能,在JAVA社區搜索了很多資料,終於找到了兩

上一個項目的開發中需要實現從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運行起來,看示例(二、16、獲取Word文件中表格的數據)裏面的具體代碼和實現效果。

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

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章