一.簡介 jxl是一個南韓人寫的java操作excel的工具, 在開源世界中,有兩套比較有影響的API可 供使用,一個是POI,一個是jExcelAPI。其中功能相對POI比較弱一點。但jExcelAPI對中文支持非常好,API是純Java的, 並不 依賴Windows系統,即使運行在Linux下, ...
一.簡介
jxl是一個南韓人寫的java操作excel的工具, 在開源世界中,有兩套比較有影響的API可 供使用,一個是POI,一個是jExcelAPI。其中功能相對POI比較弱一點。但jExcelAPI對中文支持非常好,API是純Java的, 並不 依賴Windows系統,即使運行在Linux下,它同樣能夠正確的處理Excel文件。 另外需要說明的是,這套API對圖形和圖表的支持很有限,而且 僅僅識別PNG格式。
二.簡單的實現代碼
Maven 依賴
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency>
package com.my.utils; import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class UseJxlCreateExcel { public static void main(String[] args) { // TODO Auto-generated method stub try { WritableWorkbook book = Workbook.createWorkbook(new File("D:\\java\\test\\jxlTest.xls")); WritableSheet sheet = book.createSheet(" 第一頁 ", 0); Label label1 = new Label(0, 0, "姓名"); Label label2 = new Label(1, 0, "年齡"); sheet.addCell(label1); sheet.addCell(label2); book.write(); book.close(); Workbook workbook = Workbook.getWorkbook(new File("D:\\java\\test\\jxlTest.xls")); Sheet worksheet = workbook.getSheet(0); Cell cell1 = worksheet.getCell(0, 0); String result = cell1.getContents(); System.out.println(result); workbook.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
詳見:http://www.cnblogs.com/raymond19840709/archive/2008/06/26/1230289.html
三.poi和 jxl
目前我所負責的系統中有POI和JXL兩種方式的導出數據實現。
項目初期數據量不大一般使用JXL的方式,可以滿足需求,後來在進行一些盤點,
等月度出入庫查詢報表統計的時候出現了超過最大sheet行的錯誤,另外堆記憶體也被占滿了。
所以後面就緊急將部分重要功能,要導的數據量大的幾個模塊改造成POI的方式了。
但是仍然跑的很慢,沒有瞭解POI的另外一種實現方式,後來對POI的工具類,以及POI的導出實現做了部分修正,順利完成升級。
我的初步瞭解:
JXL:支持比較低版本的excel,比如Excel 95 ,97 ,2000,2003
由於Excel版本比較低,導致最大行有限制,無法導出65535以上量級的數據
對於記憶體,和時間的花費也比POI基於記憶體+磁碟的方式高。
網友技術說明
1. 讀取Excel公式(可以讀取Excel 97以後的公式)
2. 生成Excel數據表(格式為Excel 97)
3. 支持字體、數字、日期的格式化
4. 支持單元格的陰影操作,以及顏色操作
5. 修改已經存在的數據表
6. 是最基礎的excel api
7. 小文件讀取效率比較高
8. 跨平臺
POI技術說明
- 能保持Excel里原有的巨集(但不能用它寫新的巨集)。
- 不支持跨平臺(主要就是Java語言)
- 在一些業務場景中代碼相對複雜,但是API豐富,支持多種模式的讀寫。
- 支持比較新版本的excel.
- 讀寫的時候比較占記憶體。
- 讀寫的時候比較占記憶體。
- 支持大數量大文件的讀寫操作。但是需要熟悉API。
總體來說,對於簡單的單表excel導入導出的需求,建議使用JXL。數據量稍微小點,占用記憶體少,速度快。
對於報表類的,涉及月份數據量,多表數據聚合在一起建議使用POI。
從優缺點上來說
一、jxl
優點:
Jxl對中文支持非常好,操作簡單,方法看名知意。
Jxl是純javaAPI,在跨平臺上表現的非常完美,代碼可以再windows或者Linux上運行而無需重新編寫
支持Excel 95-2000的所有版本(網上說目前可以支持Excel2007了,還沒有嘗試過)
生成Excel 2000標準格式
支持字體、數字、日期操作
能夠修飾單元格屬性
支持圖像和圖表,但是這套API對圖形和圖表的支持很有限,而且僅僅識別PNG格式。
缺點:效率低,圖片支持不完善,對格式的支持不如POI強大
二、POI
優點:
效率高(數據來源:http://blog.csdn.net/jarvis_java/article/details/4924099)
支持公式,巨集,一些企業應用上會非常實用
能夠修飾單元格屬性
支持字體、數字、日期操作
缺點:不成熟,代碼不能跨平臺,貌似不少同行在使用工程中還碰到讓人鬱悶的BUG(最近的項目中也是遇到了一些bug,不過目前沒有查出來是代碼的問題還是POI的問題,總之問題很詭異,數據替代參數總有失敗的。關於不能跨平臺這一說,我也沒有試驗過,不過Java不是跨平臺嗎?POI是JAVA的一個組件,怎麼就不能跨平臺了呢,總之這些問題還需要在以後的項目中多多實踐,才能比較出區別之處。)