JAVA 操作 excel 並生成 xml

 

並不是每一份文檔最初都是用 XML 寫的,這可能與您想像的正好相反。事實上,大多數文檔都是用其他一些工具準備出來,然後再轉換成 XML 的。許多文檔來源於 關係數據庫,或者來源於 Microsoft Office 應用程序,比如 Word,或是 Excel。

我發現很多業務中都用 Excel 編輯和準備數據。這個工具簡單易用,得到了廣泛採用,其表格格式對各種信息都十分適合,比如產品清單、姓名清單、金融數據、統計數據等等。人們通常會把 Excel 電子表格用電子郵件發給用戶,讓用戶填寫其中的空白。

當人們從某個私有應用程序中收集和準備數據的時候,通常會遇到如何恢復數據的問題。幸好在 Excel 中不存在這樣的問題。儘管對 Excel 文件格式的定義並沒有公開,我們還是可以用一些方法從電子表格中提取出 XML 信息。本篇技巧文章將回顧一下可用的方法,並着重指出每一種解決方案的優缺點。

最新版本的 Excel(包括 Excel 2002 和 Excel XP)可以將電子表格導出爲 XML。雖然您無法選擇其中使用哪些標籤,但是的確可以得到一個有效的 XML 文檔。您可以用包括 XSLT 樣式表在內的任意一種 XML 工具來處理它。這種格式稱爲 XMLSS

如果符合下列條件,這就是最簡單的方法:

  1. 您的用戶具有最新版本的 Excel,並且
  2. 您在工作站上處理 XML 數據。

第一種條件是顯而易見的,第二個則需要多解釋一下。

假設您設置好一臺服務器,用來收集和處理統計數據。您的用戶用 Excel 準備好數據,然後將這些電子表格上傳到服務器上,以供後續處理。第一步是將電子表格轉換成 XML。一種解決方法是在 Excel 中打開電子表格,然後將其導出爲 XMLSS 格式。我曾經見過一些公司用這種辦法處理文檔,雖然是可行的,但是有一點必須牢記:Excel 的設計工作環境是工作站,而不是服務器。

這樣的解決方案儘管能夠實現功能,但是卻有可能不像您期望的那樣穩定。在其他問題當中,電子表格轉換本身就可能成爲瓶頸,因爲轉換過程很難實現爲多線程。最糟糕的情況是,每一請求都在單個 Excel 副本中排起隊來。同時,這種方法也限制了您的主機系統,因爲 Excel 僅僅能在 Windows 和 MacOS 中使用。

第一種替代的方法是,不操作實際的電子表格,而是改爲操作 CSV(comma-separated value)文件。CSV 是用來交換電子表格文件的常用格式。任何適當的電子表格都可以通過 CSV 文件導出和導入。

此外,很多可以處理電子表格的第三方產品也都支持 CSV。例如,大多數會計軟件包都可以處理 CSV 文件。儘管 CSV 文件不是 XML,但用 XI 之類的工具也很容易將其轉換成 XML 文件(參閱 參考資料)。TopXML 站點上也包含了純 XSLT 轉換方法的算法(參閱 參考資料)。

使用 CSV 文件對於服務器的吸引力更大一些。首先您不再被限制在某種特定的平臺上,而是爲用戶提供了更多的選擇。用戶現在可以用 Lotus 1-2-3 以及其他電子表格工具,也可以使用很多能夠識別 CSV 格式的第三方工具。

這種方法唯一的缺點是,用戶必須花費額外的步驟,將數據保存到 CSV 中。我從實踐中發現這很少出現問題,但您的情況可能會不一樣。

最後一種方法是用特殊的庫來讀取 Excel 文檔。Excel 文件格式並沒有官方文檔,但是一些第三方機構曾對其進行逆向工程。他們還生成了一些用於解碼 Excel 文件的庫(參閱 參考資料)。下面列出一些可用的 API:

  • Java Excel這個 API 是我最喜歡的一種,因爲它是可移植的,可以很好地讀取 XML 文檔,還可以轉換成 XML。
  • XML::Excel這是一個 Perl API,用於將 Excel 文檔轉換成 XML。
  • OpenOffice其中包括用於讀取 Excel 文檔的 C++ 庫。您可以用這些庫作爲將 Excel 轉換成 XML 的基礎。
  • Apache POI它支持在 Java 代碼中讀取 Excel 文件。同樣,您也可以把它用作 Excel 轉換成 XML 的基礎。

上面列表只是一些有代表性的例子,其他工具可用於不同平臺。

轉換 Excel 文件能帶來三方面的好處:

  • 文件可以運行於任何平臺上。
  • 這些庫可以很容易地與服務器集成。
  • 用戶不需要自己導出數據。

這種解決方案最主要的風險就是,沒有哪一種庫能夠十全十美,您會發現有些電子表格並不能很好地轉換。您需要針對您的項目測試出最好的庫。

Excel 是一種流行的工具軟件,可用於準備各種想用 XML 處理的數據。幸運的是,本篇技巧文章向您展示了很多從 XML 中獲取數據的方法。最好的選擇有賴於您的項目的特定需求。

不管您是如何轉換電子表格的,您將發現最終得到的 XML 文檔和您期望的相差甚遠。也許裏面會包含一些不需要的單元格,或甚至連 XML 詞彙表都不是您想要的。您不用爲此擔心,大多數情況下,您只需要準備一個簡單的 XSLT 樣式表,就可以過濾掉不需要的數據,或是對一些標籤進行重命名。

 

 

下面是 Apache POI 操作 Excel 並生成相應 XML 文件的一個DEMO

 

Excel 數據如下:

 

 

要生成的 XML 數據格式如下:

 

 

 

具體實現如下:

 

首先打開 把相應的JAR 導入進來,並引入工程。 (這是使用的   poi-3.7  的jar 包).

 

代碼:

 

 

 

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