`
liily
  • 浏览: 20292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JAVA导出上万行Excel数据的解决方案

阅读更多
    在Java Web开发中,经常需要导出大量的数据到Excel,动辄就上千,上万行的数据让我们的程序感觉压力很大,甚至都出现无法导出的情况,使用POI、JXL直接生成Excel,很容易就造成内存溢出了。即使不溢出,由于代码执行耗时太久也会长时间阻塞web页面,导致web系统并发访问性能急剧下降。

    怎么解决内存溢出问题呢?用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()

PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setServerPage("poserver.do"); //此行必须
poCtrl1.webOpen("doc/template.xlsx", OpenModeType.xlsSubmitForm, "");
poCtrl1.setTagId("PageOfficeCtrl1"); //此行必须

分享到:
评论

相关推荐

    java导出复杂Excel内容数据动态循环

    java导出复杂Excel内容数据动态循环

    Java导出数据到Excel文件中(支持多表头)

    在Java编程中,导出数据到Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据交换等场景下。这里我们将深入探讨如何使用Java实现从数据库中查询数据并将其以多级表头的形式导入到Excel文件中。 首先,...

    java解决大批量数据导出Excel产生内存溢出的方案

    在Java开发中,当面临大批量数据导出到Excel文件时,可能会遇到内存溢出的问题。这是因为Excel文件格式本身的设计,以及Java默认处理大数据的方式,可能导致内存占用过高,尤其是在一次性加载大量数据到内存中进行...

    java导出图片到excel

    在Java编程中,导出数据到Excel是一种常见的需求,尤其当需要将图片与文本一起展示在电子表格中时。这个任务通常涉及到使用第三方库来处理Excel文件,因为Java标准库并未提供直接支持图像到Excel的功能。以下是一些...

    java Excel导出 Excel数据处理

    总结起来,Java中处理和导出Excel数据涉及使用像Apache POI这样的库,创建工作簿,添加工作表,填充和格式化数据,然后将所有内容写入文件。了解并熟练掌握这些步骤是Java开发人员处理Excel数据的基础。在实际应用中...

    Java导出数据到Excel文件中(支持多页签)

    Java导出数据到Excel文件中,支持多页签形式,如通过Java导出一个名为“各部门人员列表”,然后在文件中有三个页签,分别为“研发部”、“综合部”、“财务部”。其中这三个页签里面的数据就是通过Java导出到Excel...

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    java导出数据到Excel

    在Java开发中,将数据导出到Excel是一种常见的需求,特别是在数据分析、报表生成或数据交换等场景。Excel作为Microsoft Office套件的一部分,以其强大的表格处理功能和良好的兼容性深受用户喜爱。下面,我们将深入...

    java导出数据至excel

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Excel作为Microsoft Office套件的一部分,以其强大的表格处理功能和良好的兼容性深受开发者喜爱。本文将深入探讨...

    java 导出数据到excel 之 WritableWorkbook

    java 导出数据到excel 之 WritableWorkbook

    java多线程导出excel(千万级别)优化

    Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    java导出30万数据量的excel(采用生成多个excel,最后打包zip)

    在Java开发中,处理大数据量的Excel导出是一项常见的任务,尤其当数据量达到数十万条时,单个Excel文件可能会遇到性能瓶颈或格式限制。本项目针对这一问题提出了一种解决方案,即分块生成多个Excel文件,然后将它们...

    JAVA导出数据到excel中大数据量的解决方法

    web项目中需要有将数据导出excel的操作需求 使用html格式导出方法,但在导出时,根据最大行数重新建立新的excel文件; 数据从数据库取出使用纯jdbc方式读数据,边读边向文件中写; 待所有数据写完,将各个小excel...

    Java数据导出到Excel模板

    在Java Web开发中,数据导出到Excel是常见的需求,特别是在数据分析、报表生成以及数据交换等场景。本项目就是这样一个示例,它利用了Apache POI库来处理Excel文件的生成,使得Java程序能够方便地操作Excel数据。...

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection.json 2. 导入sql到数据库:other/excel.sql 3. idea导入...

    java操作数据库 导出excel

    Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...

    java导出excel树结构工具类

    该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。

Global site tag (gtag.js) - Google Analytics