JAVA导出上万行Excel数据的解决方案
2013-08-29 13:37
316 查看
怎么解决内存溢出问题呢?用POI处理的话,毕竟数据还是一次性在内存中进行保存的,数据量太大JVM就内存溢出了,这时我们想是不是可以导出多个Excel呢?
沿着这个思路去想问题,首先我们要确定数据量有多大,然后确定一个Excel导出多少条数据,这样就可以确定导出的Excel的数量,于是我们就可以循环的导出Excel并保存在任意的临时目录中去,这样如果内存不够的话虚拟机就会去进行回收已经保存的Excel在内存中的空间。
假设我们我们已经成功的生成了多个Excel,这时我们怎么把这N个Excel文档传到客户端展示呢?其实一个一个的传也未尝不可,但是考虑那样对用户来说体验不够好,用户保存一个个文件到本地再打开,再一个一个浏览或者打印很是不方便。
用生成多个文件发送到客户端的方案增加了开发难度,生成文件的速度也更慢了。如果换一种方式,绕过JVM的内存限制问题应该怎么解决呢?可以在客户端生成文件。
网上能找到几家做在线编辑office文件的产品,有的提供了js调用Office的VBA接口的对象,采用在客户端打开文件时,用js通过VBA接口把数据填充到Excel单元格中去生成文件,这样就绕过了服务器上内存溢出的问题,减轻了服务器的压力,是不是可行呢?经测试,此方式生成几千行数据的Excel表格速度就比较慢了,一旦上万行数据,执行效率就会急速降低甚至程序死掉。更为可怕的是,怎么把后台代码查询的数据集的上万行数据传递给前台页面的js,编程更痛苦。没有更好的方法了吗?也不是。
本人最近研究了一个国产的商业软件PageOffice,本质上也是在客户端生成Excel表格的,但是这个产品提供的是服务器端的编程对象,接口很简单,调用起来比js舒服多了,通过对这个产品提供的服务器端Excel操作对象编程,客户端就能在用户需要Excel表格的时候实时生成,也同时解决了文件的在线预览和打印问题。PageOffice肯定是对Excel的接口做过深度优化的,本人测试的结果,填充上万行数据也能瞬间完成,还支持赋值公式、单元格样式和文本样式的设置(由于本人开发的项目中无需处理这些,对于这些功能没做研究,所以无法做深入的描述),所以在此与大家分享一下,有兴趣可以去PageOffice的官网下载一个试用版测试。
附本人测试PageOffice导出2万行Excel表格的代码:
Workbook wb =new Workbook();Sheet sheet1 =wb.openSheet("Sheet1");Table table =sheet1.openTable("B1:F2");for(int i=0;i<20000;i++) { table.getDataFields().get(0).setValue(String.valueOf(i));//B列 table.getDataFields().get(1).setValue("测试");//C列 table.getDataFields().get(2).setValue("测试");//D列table.getDataFields().get(3).setValue("测试");//E列table.getDataFields().get(4).setValue("测试");//F列 table.nextRow(); }
table.close()
PageOfficeCtrlpoCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setServerPage("poserver.do");//此行必须
poCtrl1.webOpen("doc/template.xlsx",OpenModeType.xlsSubmitForm, ""); poCtrl1.setTagId("PageOfficeCtrl1");//此行必须
相关文章推荐
- JAVA导出上万行Excel数据的解决方案
- java导出excel数据量过大解决方案
- POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
- java导出百万级数据到excel解决方案
- Java实现指定数据表导出生成Excel
- Java大批量导出数据,格式可以为xml或excel.
- JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出
- java导出数据到excel里:直接导出和导出数据库数据
- Java数据导入导出excel
- Java将数据导出到Excel文件中
- Java项目之查询处理的数据导出成Excel文档工具类
- 将数据库中的数据导出到Excel中(直接导出到磁盘,Java方式)
- Java中导出Excel数据,封装Bean
- 将数据导出到Excel(java操作Excel)
- Excel数据导出,Java自定义注解
- java中导出大量数据到Excel的一种方法
- java读取数据库数据并导出到EXCEL中
- Java数据导出功能之导出Excel文件实例
- Java:将数据库数据导出到Excel (一眼就看会)
- Java数据导入导出Excel