求java解析excel大文件的解决方案

风中海岸 发布于 2017/08/05 23:44
阅读 623
收藏 2

一个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不太了解,求指点下思路,感激不尽!

加载中
0
0
蓝水晶飞机
蓝水晶飞机

之前在OSC博客看过一篇文章,也是将如何解析 Excel 大文件的,记得好像是说POI有两种模式的API,用户模式占用的内存太大(即楼主用的),另一个忘了是什么模式了,占用内存小性能高但是对编程难度稍高、API没那么友好。

博文是:https://my.oschina.net/OutOfMemory/blog/1068972

哈哈,楼主换一个模式的 API 实现吧。

蓝水晶飞机
蓝水晶飞机
另一个模式叫事件模式,估计是面向事件性、不完全解析的模式吧,要不怎么省内存呢。
0
吕兵阳
吕兵阳
可以分多个线程,一个线程解析一个sheet,采用基于事件的模型来读取。
0
FebruaryFeb
FebruaryFeb

帮顶!
大数据情况下,直接使用SpreadJS这种类Excel控件非常方便,节约开发成本。Excel里面的功能基本都支持啦,还不用写太多代码。淘宝、华为数据量很大也在用,你去试试:
http://www.grapecity.com.cn/developer/spreadjs

 

返回顶部
顶部