大資料量匯出Excel的方案

來源:互聯網
上載者:User

測試共同條件: 

資料總數為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資料/sheet     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          能                               能

PS。我提高JVM的大小几乎沒效果,不知道是怎麼回事……

引用:http://hi.baidu.com/danghj/item/31699b75ba72402bd7a89c95

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.