1. 测试共同条件:   
  2. 数据总数为110011条,每条数据条数为19个字段。   
  3. 电脑配置为:P4 2.67GHz,1G内存。   
  4.  
  5. 一、POI、JXL、FastExcel比较   
  6. POI、JXL、FastExcel均为java第三方开源导出Excel的开源项目。   
  7.  
  8. 导出方案一:一次性全部导出到一个Excel文件中。   
  9. 实际情况均报OutOfMemery错误,以下数据为报OutOfMemery数据时,数据到的最大数据数目,如表1所示:   
  10. 表1:报OutOfMemery错误时所能处理的数据量   
  11.                                        FastExecl    POI      JXL   
  12. 10000数据/sheet             37465     28996   42270   
  13. 5000数据/sheet               39096     31487   46270   
  14. 3000数据/sheet                39000    32493   47860   
  15. 小结:   
  16. 多分sheet能一定程度上减少内存的使用,但是均因为程序中创建的Cell(即为Excel中的一个单元格)无法释放,消耗大量内存,导致OutOfMemery错误;JXL表现最好,创建Cell内存使用较少。   
  17.  
  18. 导出方案二:先分多个Excel文件将数据全部导出,然后对多个Excel文件进行合并。   
  19. 首先,测试将全部数据导出所用的时间,如表2所示,数据均测试三次取平均。   
  20. 表2:导出全部数据所用时间   
  21.                                  FastExecl    POI    JXL   
  22. 10000数据/文件             68s          33s   30s   
  23. 5000数据/文件               68s          32s   33s   
  24. 3000数据/文件               59s          33s   39s   
  25. 小结:   
  26. 均成功导出Excel文件,原因是导出一个Excel文件,释放所占用的创建Cell的内存。   
  27. FastExecl表现最差,POI表现稳定,JXL随着数据的增大,速度一定程度上增快。   
  28.  
  29. 然后,进行整合,由于将多Excel合并成一个Excel文件的功能只有POI所有,故使用POI测试,结果如表3所示。   
  30. 注:数据量大合并还会报OutOfMemery错误,故合并总数据量以5万为准。   
  31. 表3:合并5万数据所用时间   
  32. 时间   
  33. 10000数据/文件 11s   
  34. 5000数据/文件 11s   
  35. 3000数据/文件 11s   
  36. 小结:   
  37. 使用POI对文件进行合并速度较快,但有数据量的限制。   
  38.  
  39.  
  40. 总结:方案二比较可行,但是数据量有限制,为5万条。   
  41.  
  42.  
  43. 二、导出XML 的电子表格   
  44. 导出的格式类似为纯文本,能实现大数据量的存储,并能实现分Sheet查看,且能添加简单的样式,符合项目要求。经实际测试Excel2003和Excel2007均能识别并正常打开查看。使用时间测试如表4所示,数据均测试3次取平均。   
  45. 表4:生成全部数据所用时间   
  46.                                    时间   
  47. 10000数据/sheet      28.0秒   
  48. 20000数据/sheet      30.1秒   
  49. 30000数据/sheet      28.1秒   
  50. 40000数据/sheet      26.5秒   
  51. 50000数据/sheet      28.2秒   
  52. 55000数据/sheet      26.8秒   
  53. 59000数据/sheet      30.1秒   
  54. 59500数据/sheet      发生假死机现象   
  55. 60000数据/sheet      发生假死机现象   
  56.  
  57. 但是导出的数据为XML不是纯正的Excel文件,如使用Excel文件的xls后缀保存,打开文件会弹出警告,但不影响阅读。   
  58. 且经实际测试,在Access2007和Access2003中可通过导入外部数据的方式,将导出的XML导入进Access数据库。   
  59.  
  60. 三、总结   
  61. 项目要求是大数据量导出Excel文件,POI、JXL、FastExcel不能完全满足要求;使用XML 的电子表格导出实现了大数据量导出,但是格式为XML不是纯正的Excel文件,为曲线救国。两种导出形式的比较,如表5所示。   
  62. 表5:合并5万数据所用时间   
  63.                                POI、JXL、FastExcel      XML 的电子表格   
  64. 导出数据格式                 为纯Execl文件                  为XML文件   
  65. 导出数据量                            小                               较大   
  66. 能否分Sheet                         能                               能   
  67. 能否添加样式                         能                               能   
  68. 能否添加图片                        POI 能                         不能   
  69. 导出数据能否导入Access         能                               能