試共同條件:
數(shù)據(jù)總數(shù)為110011條,每條數(shù)據(jù)條數(shù)為19個字段。
電腦配置為:P4 2.67GHz,1G內(nèi)存。
一、POI、JXL、FastExcel比較
POI、JXL、FastExcel均為java第三方開源導(dǎo)出Excel的開源項目。
導(dǎo)出方案一:一次性全部導(dǎo)出到一個Excel文件中。
實際情況均報OutOfMemery錯誤,以下數(shù)據(jù)為報OutOfMemery數(shù)據(jù)時,數(shù)據(jù)到的最大數(shù)據(jù)數(shù)目,如表1所示:
表1:報OutOfMemery錯誤時所能處理的數(shù)據(jù)量
|
FastExecl |
POI |
JXL |
10000數(shù)據(jù)/sheet |
37465 |
28996 |
42270 |
5000數(shù)據(jù)/sheet |
39096 |
31487 |
46270 |
3000數(shù)據(jù)/sheet |
39000 |
32493 |
47860 |
小結(jié):
多分sheet能一定程度上減少內(nèi)存的使用,但是均因為程序中創(chuàng)建的Cell(即為Excel中的一個單元格)無法釋放,消耗大量內(nèi)存,導(dǎo)致OutOfMemery錯誤;JXL表現(xiàn)最好,創(chuàng)建Cell內(nèi)存使用較少。
導(dǎo)出方案二:先分多個Excel文件將數(shù)據(jù)全部導(dǎo)出,然后對多個Excel文件進行合并。
首先,測試將全部數(shù)據(jù)導(dǎo)出所用的時間,如表2所示,數(shù)據(jù)均測試三次取平均。
表2:導(dǎo)出全部數(shù)據(jù)所用時間
|
FastExecl |
POI |
JXL |
10000數(shù)據(jù)/文件 |
68s |
33s |
30s |
5000數(shù)據(jù)/文件 |
68s |
32s |
33s |
3000數(shù)據(jù)/文件 |
59s |
33s |
39s |
小結(jié):
均成功導(dǎo)出Excel文件,原因是導(dǎo)出一個Excel文件,釋放所占用的創(chuàng)建Cell的內(nèi)存。
FastExecl表現(xiàn)最差,POI表現(xiàn)穩(wěn)定,JXL隨著數(shù)據(jù)的增大,速度一定程度上增快。
然后,進行整合,由于將多Excel合并成一個Excel文件的功能只有POI所有,故使用POI測試,結(jié)果如表3所示。
注:數(shù)據(jù)量大合并還會報OutOfMemery錯誤,故合并總數(shù)據(jù)量以5萬為準(zhǔn)。
表3:合并5萬數(shù)據(jù)所用時間
|
時間 |
10000數(shù)據(jù)/文件 |
11s |
5000數(shù)據(jù)/文件 |
11s |
3000數(shù)據(jù)/文件 |
11s |
小結(jié):
使用POI對文件進行合并速度較快,但有數(shù)據(jù)量的限制。
總結(jié):方案二比較可行,但是數(shù)據(jù)量有限制,為5萬條。
二、導(dǎo)出XML 的電子表格
導(dǎo)出的格式類似為純文本,能實現(xiàn)大數(shù)據(jù)量的存儲,并能實現(xiàn)分Sheet查看,且能添加簡單的樣式,符合項目要求。經(jīng)實際測試Excel2003和Excel2007均能識別并正常打開查看。使用時間測試如表4所示,數(shù)據(jù)均測試3次取平均。
表4:生成全部數(shù)據(jù)所用時間
|
時間 |
10000數(shù)據(jù)/sheet |
28.0秒 |
20000數(shù)據(jù)/sheet |
30.1秒 |
30000數(shù)據(jù)/sheet |
28.1秒 |
40000數(shù)據(jù)/sheet |
26.5秒 |
50000數(shù)據(jù)/shee |
28.2秒 |
55000數(shù)據(jù)/sheet |
26.8秒 |
59000數(shù)據(jù)/sheet |
30.1秒 |
59500數(shù)據(jù)/sheet |
發(fā)生假死機現(xiàn)象 |
60000數(shù)據(jù)/sheet |
發(fā)生假死機現(xiàn)象 |
但是導(dǎo)出的數(shù)據(jù)為XML不是純正的Excel文件,如使用Excel文件的xls后綴保存,打開文件會彈出警告,但不影響閱讀。
且經(jīng)實際測試,在Access2007和Access2003中可通過導(dǎo)入外部數(shù)據(jù)的方式,將導(dǎo)出的XML導(dǎo)入進Access數(shù)據(jù)庫。
三、總結(jié)
項目要求是大數(shù)據(jù)量導(dǎo)出Excel文件,POI、JXL、FastExcel不能完全滿足要求;使用XML 的電子表格導(dǎo)出實現(xiàn)了大數(shù)據(jù)量導(dǎo)出,但是格式為XML不是純正的Excel文件,為曲線救國。兩種導(dǎo)出形式的比較,如表5所示。
表5:合并5萬數(shù)據(jù)所用時間
|
POI、JXL、FastExcel |
XML 的電子表格 |
導(dǎo)出數(shù)據(jù)格式 |
為純Execl文件 |
為XML文件 |
導(dǎo)出數(shù)據(jù)量 |
小 |
較大 |
能否分Sheet |
能 |
能 |
能否添加樣式 |
能 |
能 |
能否添加圖片 |
POI 能 |
不能 |
導(dǎo)出數(shù)據(jù)能否導(dǎo)入Access |
能 |
能 |
|
posted on 2009-08-07 15:57
xzc 閱讀(1804)
評論(0) 編輯 收藏 所屬分類:
Java