求java解析excel大文件的解决方案
一个excel有5/6个sheel,sheet多的大概有3万条数据以上,整个文件15M左右。
文件可能是.xls或xlsx文件。
需求:解析每个sheet进行入库,最好能精确获取到某一行某一列的值,这样可以配置每一列对应的是哪个字段。
问题:使用poi普通的读取占用年内存大,且溢出,方式如下:
if (isE2007)
wb = new XSSFWorkbook(input);
else
wb = new HSSFWorkbook(input);
这种方法是整个文件读取,容易内存溢出,已加内存,还是会溢出,存在较大的风险,而且效率非常慢。
另网上另一种方法,是转为csv,一行一行的读取,继承DefaultHandler。这个方法效率是挺快的,但是经过测试不支持xls的文件。
请问有大神有使用什么好的插件或demo推荐吗?首次接触解析excle不太了解,求指点下思路,感激不尽!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
帮顶!
大数据情况下,直接使用SpreadJS这种类Excel控件非常方便,节约开发成本。Excel里面的功能基本都支持啦,还不用写太多代码。淘宝、华为数据量很大也在用,你去试试:
http://www.grapecity.com.cn/developer/spreadjs
可以分多个线程,一个线程解析一个sheet,采用基于事件的模型来读取。
另一个模式叫事件模式,估计是面向事件性、不完全解析的模式吧,要不怎么省内存呢。
之前在OSC博客看过一篇文章,也是将如何解析 Excel 大文件的,记得好像是说POI有两种模式的API,用户模式占用的内存太大(即楼主用的),另一个忘了是什么模式了,占用内存小性能高但是对编程难度稍高、API没那么友好。
博文是:https://my.oschina.net/OutOfMemory/blog/1068972
哈哈,楼主换一个模式的 API 实现吧。
加内存