1. 程式人生 > >利用poi操作word文件(針對docx格式)

利用poi操作word文件(針對docx格式)

一:認識POI 
Apache POI是一個開源的利用Java讀寫Excel、WORD等微軟OLE2元件文件的專案。最新的3.5版本有很多改進,加入了對採用OOXML格式的Office 2007支援,如xlsx、docx、pptx文件。 
POI主頁:poi.apache.org/ 

二:POI3.5相關下載 
                3.5Jar包下載地址 
                3.5原始碼下載地址 

三:POI組成部分概覽 
以下是POI的幾個重要組成部分,以及各元件的功能概述。 

POIFS 
POIFS是該專案的最古老,最穩定的一部分。.這是格式化OLE 2複合文件為純Java的介面。 它同時支援讀寫功能。所有的元件,最終都依賴於它的定義 
HSSF 和 XSSF 
HSSF: MS-Excel 97-2003(.xls),基於BIFF8格式的JAVA介面。 
XSSF:MS-Excel 2007+(.xlsx),基於OOXML格式的JAVA介面。 
HWPF 和XWPF 
HWPF: MS-Word 97-2003(.doc),基於BIFF8格式的JAVA介面。只支援.doc檔案簡單的操作,讀寫能力有限。本API為POI專案早期開發,很不幸的 是主要負責HWPF模組開發的工程師-“Ryan Ackley”已經離開Apache組織,現在該模組沒有人維護、更新、完善。 
XWPF:MS-Word 2007+(.docx),基於OOXML格式的JAVA介面。較HWPF功能完善。 

四:利用POI提取Word文字內容及批註 
97-2003: 

import org.apache.poi.POITextExtractor; 
import org.apache.poi.hwpf.extractor.WordExtractor; 
//得到.doc檔案提取器 
org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath)); 
//提取.doc正文文字 
String text = doc.getText(); 
//提取.doc批註 
String[] comments = doc. getCommentsText(); 

2007 

import org.apache.poi.POITextExtractor; 
import org.apache.poi.xwpf.extractor.XWPFWordExtractor; 
import org.apache.poi.xwpf.usermodel.XWPFComment; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
//得到.docx檔案提取器 
org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath)); 
//提取.docx正文文字 
String text = docx.getText(); 
//提取.docx批註 
org.apache.poi.xwpf.usermodel.XWPFComment[] comments = docx.getDocument()).getComments(); 
for(XWPFComment comment:comments){ 
comment.getId();//提取批註Id 
comment.getAuthor();//提取批註修改人 
comment.getText();//提取批註內容 

五:利用POI提取Word總頁數、總字元數... 
97-2003 
WordExtractor doc = new WordExtractor(new FileInputStream(filePath));//.doc格式Word檔案提取器 
int pages = doc.getSummaryInformation().getPageCount();//總頁數 
int wordCount = doc.getSummaryInformation().getWordCount();//總字元數 
2007: 

XWPFDocument docx = nnew XWPFDocument(POIXMLDocument.openPackage(filePath)); 

int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//總頁數 
int characters = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的總字元數 另外還有getCharactersWithSpaces()方法獲取帶空格的總字數。 


小技巧: 
2007採用了全新的OFFICE OPEN XML格式來儲存,跟以前二進位制檔案格式的office 97-2003(.doc、.xls...)不同,所以可以直接重新命名xx.docx的檔案為xx.zip,用WinRar開啟可以看到office2007的儲存檔案,其中word/document.xml裡面儲存了最重要的正文內容,word/comments.xml儲存的是批註內容,可以多研究一下這些檔案,有助於開發~ 

Office Open XML 檔案格式簡介  www.microsoft.com/china/msdn/library/office/office/OfficeOpenXMLFormats.mspx 
隨著20世紀90年代XML的出現,企業計算客戶開始逐漸認識到,在他們所依賴的計算機產品和應用中採用開放的格式和標準所帶來的商業價值。IT專業人員將從通用的資料格式中受益匪淺,這種格式可能是XML,因為它擁有被應用程式、平臺和Internet瀏覽器讀取的能力。 

同樣,隨著在Microsoft Office 2000中對於XML格式的支援與採用,開發人員開始認識到,他們需要將以前的Microsoft Office版本中的二進位制檔案格式轉換為XML格式。二進位制檔案(.doc,.dot,.xls,以及.ppt檔案)在過去幾年中一直肩負著儲存和轉換資料的重任,而現在它們無法滿足新的市場需求的挑戰,其中包括輕鬆地在異構應用之間傳遞資料,以及允許使用者從這些資料中搜集商業資訊。 

2007 Microsoft Office system為Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007採用了基於XML的檔案格式,從而延續了這種轉移。新的檔案格式,稱為Office Open XML格式,解決了上述市場需求的問題,同時改變了您基於Microsoft Office文件建立解決方案的方式