最近因项目需要需生成excel文件,首先采用了jxl来实现需求,但是在实施时,发现,当导出的数据相当大的时候,会导出内存溢出。经过详细的分析。后来得出jxl在处理大数据的时候很难适应这种需求。这时,采用文本的形式生成文件将会是更好的解决方案。一下是测试的数据。
无样式、数据格式处理 | 处理数据格式、单元格样式 | |||||||
内存(MB) | 时间(MS) | 内存(MB) | 时间(MS) | |||||
数据量 | html | jxl | html | jxl | html | jxl | html | jxl |
100行10列 | 1 | 10 | 47 | 408 | 1 | 10 | 129 | 407 |
1000行10列 | 1 | 11 | 93 | 532 | 1 | 11 | 187 | 521 |
10000行10列 | 3 | 23 | 453 | 1314 | 3 | 23 | 834 | 1356 |
100000行10列 | 29 | out | 4766 | out | 29 | out | 5767 | out |
20000行10列 | 6 | 45 | 665 | 2018 | 6 | 45 | 1264 | 1987 |
100行20列 | 1 | 10 | 62 | 423 | 1 | 10 | 140 | 432 |
1000行20列 | 1 | 12 | 140 | 579 | 1 | 12 | 250 | 613 |
10000行20列 | 6 | 45 | 640 | 1894 | 6 | 45 | 1343 | 1935 |
100行50列 | 1 | 10 | 79 | 439 | 1 | 10 | 156 | 501 |
1000行50列 | 1 | 15 | 220 | 783 | 1 | 15 | 452 | 796 |
10000行50列 | 10 | out | 1448 | out | 17 | out | 3073 | out |
20000行20列 | 10 | 63 | 1639 | 4855 | 10 | 63 | 2500 | 4762 |
20000行50列 | 31 | out | 3077 | out | 31 | out | 5897 | out |
说明:以上数据信息是测试两种生成excel文件解决方案(生成html文件、java jxl生成)所需内存的大小、处理时间。 | ||||||||
注:测试的环境:cup 1.6GHZ 内存1G jvm总内存64MB | ||||||||
总结:在小数据量时采用jxl生成的格式比较规范,excel打开生成文件的速度较快,但jxl不适宜处理大数据生成excel,在jvm 64M的情况下,能处理的单元格边界在80万左右 |