您好,登錄后才能下訂單哦!
小編今天帶大家了解Office文件格式突變如何促使Java和Office更完美集成,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學習“Office文件格式突變如何促使Java和Office更完美集成”的知識吧。
Office文件格式突變,促使Java和Office更完美集成
Office是大家非常熟悉的辦公軟件。它的強大的文字和表格的處理能力幾乎無人能敵。而其中的Excel除了被應用在傳統的表格處理中,也常被廣大程序員“抓”來充當報表系統的前端。如我們使用的Java Web程序,在后臺生成一個帶報表數據的Excel文件,然后將這個文件送到前臺瀏覽器(必須是IE),這樣這個Excel文件就可以嵌入到IE中。
這樣處理報表既可以利用Excel強大的表格處理功能,又可以使程序員省了很多的麻煩。但這么做有一個限制。就是服務器的Java生成Excel報表時,一般不會使用COM來調用Excel組件,而是按著Excel文件的二進制格式直接生成Excel文件。但由于Office是商業軟件,微軟并沒有將 Office的文件格式完全公開(就算公開,也不是最新版本的),這樣就給生成Excel文件帶來了一定的困難。雖然一些比較新的Office文檔可以保存成XML格式,但這種文件格式只是一種簡陋的替代,再說前端的IE并不認XML格式的Excel文檔。也許是微軟意識到了這個問題,在新推出的 Office2007中徹底解決了這個問題。
在以前老版本Office中,由于法律或技術原因,脫離Office來處理Office文檔將會遇到非常多的問題。也許是開源給微軟帶來的壓力,或許是其他的原因,微軟對Office2007的格式做了和以前完全不同的處理。以前的 Office文檔是100%的二進制格式。第三方的工具操作起來非常不方便,而Office2007從整體上都是基于XML格式的,這里并不是說 Office2007文檔可以保存成XML格式。而是Office2007默認的文檔格式就是XML的(Word的docx、Excel的xlsx等)。也許有人會感到奇怪,用文本編輯器打開docx后,顯示的仍然是二進制格式,并不是什么XML。其實docx并不是普通的XML格式,當然,也不只是一個 XML文件,docx本質上是一個zip文件,里面有一系列的xml、目錄和其他的文件。如果我們將docx改成zip。就可以用winzip等軟件將其解開(從這一點我們可以看出,docx中的x就是指XML)。
目錄中的XML都是基于OpenXML格式的,這個規范微軟已經提供提交給了ECMA,因此,這已經成為公共的標準,我們可以自由地使用它們。由于Office2007文檔全部使用了壓縮的xml格式,因此,只有支持讀取zip 格式和xml格式的語言都可以操作Office2007的文檔,當然,Java也不例外。而使用Java和Office聯合操作報表將更加容易。在本文中將演示如何使用Java來操作Office2007的文檔,這里以word2007為例。
我們將這個文檔保存為test.docx。注意,不要保存成向后兼容的word文檔格式,也不要保存成Office2003或更好的Office的WordML格式。這個文檔將是一個壓縮的zip格式,如果將test.docx改成test.zip。
從上面解開的文件結構可以非常清楚地了解test.docx的保存結構。在Java中我們可以使用java.util.zip包來解開test.docx。從這個目錄結構我們可以很容易地猜出文檔的主要內容保存在document.xml中。而其他的xml文件將保存不同的信息。如字體信息將保存在 fontTable.xml中,而Office主題將保存在theme.xml和theme1.xml中。
下面我們開使使用Java對這個文件進行操作。首先我們使用JUnit4來確定test.docx是否存在,以及是否可以對其進行讀寫,代碼如下:
@Test public void verifyFile()
...{
assertTrue(new File("test.docx").exists());
assertTrue(new File("test.docx").canRead());
assertTrue(new File("test.docx").canWrite());
}
下面的代碼將簡單地驗證
java.util.zip.ZipFile
類是否可以打開
test.docx
。
@Test public void openFile() throws IOException, ZipException
...{
ZipFile docxFile = new ZipFile(new File("test.docx"));
assertEquals(docxFile.getName(), "test.docx");
}
經過測試,ZipFile完全可以操作test.docx。看來很多人都迫不急待了,下面就讓我們來從test.docx中來讀取數據吧。首先應該打開document.xml文件。代碼如下:
Test public void listContents() throws IOException, ZipException
...{
boolean documentFound = false;
ZipFile docxFile = new ZipFile(new File("test.docx"));
Enumeration entriesIter = docxFile.entries();
while (entriesIter.hasMoreElements())
...{
ZipEntry entry = entriesIter.nextElement();
if(entry.getName().equals("document.xml"))
documentFound = true;
}
assertTrue(documentFound);
}
但是運行上面的代碼將拋出一個異常,好象說明document.xml并不存在,事實上并不是如此。而是ZipFile API需要一個完整的文件或目錄名,因此,需要將上面的路徑變成word/document.xml。
下一步我們將通過
ZipFile
得到一個
ZipEntry
對象,并通過這個對象來看看
xml
中有什么,代碼如下:
@Test public void getDocument() throws IOException, ZipException
...{
ZipFile docxFile = new ZipFile(new File("test.docx"));
ZipEntry documentXML = docxFile.getEntry("word/document.xml");
assertNotNull(documentXML);
}
感謝大家的閱讀,以上就是“Office文件格式突變如何促使Java和Office更完美集成”的全部內容了,學會的朋友趕緊操作起來吧。相信億速云小編一定會給大家帶來更優質的文章。謝謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。