試共同條件: 數據總數為110011條,每條數據條數為19個字段。 電腦配置為:P4 2.67GHz,1G內存。 一、POI、JXL、FastExcel比較 POI、JXL、FastExcel均為java第三方開源導出Excel的開源項目。 導出方案一:一次性全部導出到一個Excel文件中。 實際情況均報OutOfMemery錯誤,以下數據為報OutOfMemery數據時,數據到的最大數據數目,如表1所示: 表1:報OutOfMemery錯誤時所能處理的數據量
多分sheet能一定程度上減少內存的使用,但是均因為程序中創建的Cell(即為Excel中的一個單元格)無法釋放,消耗大量內存,導致OutOfMemery錯誤;JXL表現最好,創建Cell內存使用較少。 導出方案二:先分多個Excel文件將數據全部導出,然后對多個Excel文件進行合并。 首先,測試將全部數據導出所用的時間,如表2所示,數據均測試三次取平均。 表2:導出全部數據所用時間
均成功導出Excel文件,原因是導出一個Excel文件,釋放所占用的創建Cell的內存。 FastExecl表現最差,POI表現穩定,JXL隨著數據的增大,速度一定程度上增快。 然后,進行整合,由于將多Excel合并成一個Excel文件的功能只有POI所有,故使用POI測試,結果如表3所示。 注:數據量大合并還會報OutOfMemery錯誤,故合并總數據量以5萬為準。 表3:合并5萬數據所用時間
使用POI對文件進行合并速度較快,但有數據量的限制。 總結:方案二比較可行,但是數據量有限制,為5萬條。 二、導出XML 的電子表格 導出的格式類似為純文本,能實現大數據量的存儲,并能實現分Sheet查看,且能添加簡單的樣式,符合項目要求。經實際測試Excel2003和Excel2007均能識別并正常打開查看。使用時間測試如表4所示,數據均測試3次取平均。 表4:生成全部數據所用時間
但是導出的數據為XML不是純正的Excel文件,如使用Excel文件的xls后綴保存,打開文件會彈出警告,但不影響閱讀。 且經實際測試,在Access2007和Access2003中可通過導入外部數據的方式,將導出的XML導入進Access數據庫。 三、總結 項目要求是大數據量導出Excel文件,POI、JXL、FastExcel不能完全滿足要求;使用XML 的電子表格導出實現了大數據量導出,但是格式為XML不是純正的Excel文件,為曲線救國。兩種導出形式的比較,如表5所示。 表5:合并5萬數據所用時間
|