Office檔案格式突變,促使Java和Office更完美整合(轉)
Office檔案格式突變,促使Java和Office更完美整合
[@more@]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);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-921807/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Office檔案的Open Xml 格式XML
- 什麼是 Office Open XML 檔案格式XML
- Centos 安裝 openoffice 並實現將office檔案轉化為pdfCentOS
- 使用Apache POI 處理Miscrosoft Office各種格式檔案ApacheROS
- office舊版本檔案轉換為新版本檔案
- Android應用整合Office檔案能力完全攻略Android
- Centos(Linux)安裝openoffice 並實現將office檔案轉化為pdfCentOSLinux
- docker映象構建libreoffice轉換檔案Docker
- office檔案格式複合文件二進位制結構解析
- Microsoft Office Word、Excel 和 PowerPoint 2007 檔案格式相容包 docx 開啟在office 2003中 docROSExcel
- 一種自主學習 Office Open XML 檔案格式的方法介紹XML
- 網頁中Office和pdf相關檔案匯出網頁
- WPS Office和微軟Office精確相容微軟
- Office2003實現PDF檔案轉Word文件(轉)
- 【第三方對接】使用 PageOffice 實現線上 Office 整合到 Spring 專案Spring
- JAVA中GBK格式檔案和UTF-8格式檔案互相轉換Java
- office for Mac Excel匯入csv檔案亂碼MacExcel
- Python_13-Office檔案資料操作Python
- pageoffice線上開啟word檔案生成表格
- libreoffice轉換檔案為pdf檔案亂碼問題解決辦法
- win10 office tmp快取檔案怎麼刪除_win10 office tmp快取檔案如何刪除Win10快取
- 關於專案引用onlyoffice作為線上office檔案預覽與編輯的筆記(二)筆記
- linux下安裝 openoffice 實現 office文件轉 pdfLinux
- 關於MDI檔案與Microsoft Office Document ImagingROS
- .NET實現網頁版Office檔案預覽網頁
- 沒有Microsoft的Office (轉)ROS
- 在office2003中開啟office2007檔案的方法
- Open Office XML 格式中的 Style 設計原理XML
- Java9之class檔案格式變動Java
- office改不了pdf檔案,本文告訴你修改方法
- office for mac的自動恢復檔案的路徑Mac
- NeoOffice for Mac(office辦公軟體)Mac
- LibreOffice for Macoffice辦公套件Mac套件
- LibreOffice for Mac(Office辦公套件)Mac套件
- office2010開啟office2007的檔案的設定方法
- office轉pdf和圖片實現線上預覽
- onlyOffice
- Office公式公式