大數據量導出Excel的方案


試共同條件: 
數據總數為110011條,每條數據條數為19個字段。 
電腦配置為:P4 2.67GHz,1G內存。 

一、POI、JXL、FastExcel比較 
POI、JXL、FastExcel均為java第三方開源導出Excel的開源項目。 

導出方案一:一次性全部導出到一個Excel文件中。 
實際情況均報OutOfMemery錯誤,以下數據為報OutOfMemery數據時,數據到的最大數據數目,如表1所示: 
表1:報OutOfMemery錯誤時所能處理的數據量 

  FastExecl POI JXL
10000數據/sheet 37465 28996 42270
5000數據/sheet 39096 31487 46270
3000數據/sheet 39000 32493 47860

小結: 
多分sheet能一定程度上減少內存的使用,但是均因為程序中創建的Cell(即為Excel中的一個單元格)無法釋放,消耗大量內存,導致OutOfMemery錯誤;JXL表現最好,創建Cell內存使用較少。 

導出方案二:先分多個Excel文件將數據全部導出,然后對多個Excel文件進行合並。 
首先,測試將全部數據導出所用的時間,如表2所示,數據均測試三次取平均。 
表2:導出全部數據所用時間 

  FastExecl POI JXL
10000數據/文件 68s 33s 30s
5000數據/文件 68s 32s 33s
3000數據/文件 59s 33s 39s

小結: 
均成功導出Excel文件,原因是導出一個Excel文件,釋放所占用的創建Cell的內存。 
FastExecl表現最差,POI表現穩定,JXL隨着數據的增大,速度一定程度上增快。 

然后,進行整合,由於將多Excel合並成一個Excel文件的功能只有POI所有,故使用POI測試,結果如表3所示。 
注:數據量大合並還會報OutOfMemery錯誤,故合並總數據量以5萬為准。 
表3:合並5萬數據所用時間 

  時間
10000數據/文件 11s
5000數據/文件 11s
3000數據/文件 11s

小結: 
使用POI對文件進行合並速度較快,但有數據量的限制。 


總結:方案二比較可行,但是數據量有限制,為5萬條。 


二、導出XML 的電子表格 
導出的格式類似為純文本,能實現大數據量的存儲,並能實現分Sheet查看,且能添加簡單的樣式,符合項目要求。經實際測試Excel2003和Excel2007均能識別並正常打開查看。使用時間測試如表4所示,數據均測試3次取平均。
表4:生成全部數據所用時間 

  時間
10000數據/sheet 28.0秒
20000數據/sheet 30.1秒
30000數據/sheet 28.1秒
40000數據/sheet 26.5秒
50000數據/shee 28.2秒
55000數據/sheet 26.8秒
59000數據/sheet 30.1秒
59500數據/sheet 發生假死機現象
60000數據/sheet 發生假死機現象


但是導出的數據為XML不是純正的Excel文件,如使用Excel文件的xls后綴保存,打開文件會彈出警告,但不影響閱讀。 
且經實際測試,在Access2007和Access2003中可通過導入外部數據的方式,將導出的XML導入進Access數據庫。 

三、總結 
項目要求是大數據量導出Excel文件,POI、JXL、FastExcel不能完全滿足要求;使用XML 的電子表格導出實現了大數據量導出,但是格式為XML不是純正的Excel文件,為曲線救國。兩種導出形式的比較,如表5所示。 
表5:合並5萬數據所用時間 

  POI、JXL、FastExcel XML 的電子表格
導出數據格式 為純Execl文件 為XML文件
導出數據量 較大
能否分Sheet
能否添加樣式
能否添加圖片 POI 能 不能
導出數據能否導入Access


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM