0 0

关于POI生成报表大数据量的问题0

    我们在做一个报表导出的功能,WEB 容器Server使用TOMCAT6,JVM可用的内存范围只有512M,导出报表使用excel需要下载到本地。

    现在遇到性能问题,我现在采用的是POI的HSSF导出,导出的数据来自数据库中的多个表,列最多时,列的个数为110列,如果数据一次性导出会OutOfMemory。
    我们现在的做法是,每8K条记录导出到一个Excel的一个Sheet,为一个文件;写成多个文件,最后把生成的多个文件打包成一个压缩包反回客户端。但是现在的需求是,只要生成一个Excel文件,希望能达到20W行,在内存512的范围内,求解决方案。如果有知道POI Event 生成的方式,希望提供些指导性文章或者Demo。能找到的资料不多。


求有经验的高手指导!!
2014年6月08日 23:57

5个答案 按时间排序 按投票排序

0 0

加个内存会死人吗?

2014年6月10日 17:58
0 0

请导出 csv 省事。。

2014年6月10日 09:10
0 0

mkkkkkkkkkkkkkkkk

2014年6月09日 23:40
0 0

首先确定一下你的格式,到底是xlsx还是xls,看你说想要有20万行,我印象里面xls是没法到20万行的(最多65535行),列也有限制(貌似255),但是xlsx是没这个限制的(或者说限制宽松很多)

如果是xlsx的话,你可以新建一个xlsx文件,然后把后缀改成zip,然后解压缩,看看生成的结果,是一堆文本文件。然后你加一行数据,再改后缀,解压缩,看看结果,你会发现,xlsx文件的更新实际上就是更新xml的一个操作。
那么你应该明白了,你后台需要做的就是做xml文件,然后zip压缩后把后缀改成xlsx,这样的话,不会涉及到POI那些很耗内存的操作,应该是很容易做到你要的效果的。

如果是xls格式,那么首先行数达不到你的要求。如果强行要做,那么推荐你还是先把数据查出来放在文本文件里面,然后调用另一个process来在外部运行来完成这步工作(或者干脆连查询所有的事情都交给外部进行,这时候是启动另一个java虚拟机,占用的是别的内存,甚至可以交给别的server来干这件事),你的程序可以轮询这个工作做完没有,做完后再下载。

说实话,我觉这种需求的正路就是应该是异步另外一个process去做,做完之后再下载。
否则用户画面上点个按钮,数据量超大的情况下你让他等20分钟是不是很蠢?应该给他一个机制告诉他这个事很花时间,现在正在做,做完后让他自己下载是比较合适的作法。

如果一定要在画面上的一次请求搞定的话,参考我说的用xlsx或者轮询另外一个process的作法应该能搞定你的需求。

2014年6月09日 16:53
0 0

能使用xls格式的吗? 如果可以就简单了

2014年6月09日 13:53

相关推荐

    poi报表+详细文档

    6. **数据流处理**:为了处理大数据量,POI提供了SXSSF API,它基于内存流处理,可以有效地减少内存占用。这种方式在处理大量数据时非常有用,因为它不会一次性加载整个工作簿到内存中。 7. **读取Excel文件**:...

    poi导入导出excel生成报表

    ### POI 导入导出 Excel 生成报表详解 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件的 Java API,其中包括对 Excel 文件的支持。通过 POI,我们可以轻松地实现 Excel 文件的创建、读取、...

    POI3.8中 大数据量的处理.pdf

    总之,Apache POI 3.8 中的SXSSFWorkbook是处理大数据量Excel文件的理想选择,它通过流式处理和磁盘缓存策略,有效地解决了内存限制问题,确保了大规模数据处理的可行性。在互联网和计算机科学(cs)领域,这样的...

    poi生成excel表格

    大量数据写入时,注意使用 `SXSSFWorkbook` 类,它是基于流的,能有效减少内存占用,防止因大数据量导致的内存溢出。 以上是Apache POI生成Excel表格的基本知识点和操作步骤。通过这些示例,你可以理解如何在Java...

    java利用poi生成excel报表、处理word文档

    总结,Java POI库为开发者提供了一种高效、灵活的方式来处理Excel报表和Word文档,无论是在生成报表还是数据导入导出、文档格式转换等方面,都是一个不可或缺的工具。通过深入理解和实践,我们可以构建出满足各种...

    poi jxl 生成EXCEL 报表

    当你需要生成包含大量格式化数据、图表或其他复杂功能的Excel报表时,POI可能是更好的选择。而如果你只需要处理基本的数据写入和格式设置,JXL可能更合适。 5. **示例代码**: 创建一个简单的Excel报表,使用POI...

    jxls报表生成利器,比起jxl,poi牛逼得很

    5. **流式处理**: 对于大数据量的报表,Apache POI提供了流式处理模式,可以减少内存消耗,避免内存溢出问题。 6. **性能比较**: 相比jxl,Apache POI提供了更广泛的支持和更好的性能,尤其是在处理复杂Excel格式和...

    POI导出报表

    【POI导出报表】是Java开发中一个常见的任务,主要涉及如何利用Apache POI库来生成和导出Word、Excel以及PDF格式的报表。Apache POI是一个流行的开源项目,它为Microsoft Office文档(如Word、Excel)提供读写功能,...

    Springboot+mybatis+poi输出报表

    在IT行业中,生成报表是一项常见的任务,特别是在数据分析和业务处理中。本项目“Springboot+mybatis+poi输出报表”正是这样一个系统,它利用流行的Java技术栈来实现从数据库提取数据并生成Excel报表供用户下载的...

    java实现poi模板生成PPT文件代码

    总结来说,使用Java和Apache POI生成PPT文件涉及理解PPT文件结构、掌握POI API、创建模板、数据绑定和错误处理等多个步骤。在给定的代码中,可能有两个不同的迭代实现,分别对应两种不同的处理方式或优化策略。通过...

    基于Apache POI导出大数据量(百万级)Excel的实现.zip

    在处理大数据量时,将数据导出为Excel文件是一项常见的需求,特别是在数据分析、报表生成以及数据交换...以上就是关于基于Apache POI实现大数据量Excel导出的关键知识点和实践建议,希望对你在处理类似问题时有所帮助。

    java-poi-excel-导出20万条记录【源代码】

    本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量的Excel导出,避免内存溢出的问题。Apache POI是一个流行的开源Java API,用于读写Microsoft Office格式的文件,...

    POI实现的基于动态模板的EXCEL数据导出

    5. 如果数据量大,可能需要分批写入,以避免一次性加载过多数据导致内存溢出。 在实际应用中,为了提高性能,可能还需要考虑异步处理、多线程等技术,以实现更高效的批量数据导出。此外,优化内存管理和设置适当的...

    POI导入excel大数据处理,支持excel2003,2007

    2. **高效读写**:POI允许开发者以流式方式处理Excel数据,减少了内存占用,适合处理大数据量的Excel文件。 3. **灵活性**:可以创建、修改、读取单元格、行、列等元素,以及样式、公式、图表等复杂功能。 4. **易于...

    POI技术简单应用开发报表简单使用

    在报表开发中,POI的应用尤为广泛,可以方便地生成各种复杂的Excel报表。 1. **POI入门** - **安装与导入**: 在项目中引入Apache POI依赖,通常通过Maven或Gradle管理。对于Maven,可以在pom.xml中添加对应的依赖...

    java动态大数据量EXCEL下载

    Java 动态大数据量EXCEL下载是一个常见的需求,在企业级应用中尤为常见,尤其是在数据分析、报表生成和数据导出场景下。以下是对这个主题的详细解释: 首先,我们需要理解Java如何处理大数据量的EXCEL文件。传统的...

    利用poi获取excel数据批量插入大量数据到mysql

    在IT行业中,处理大量数据是常见的任务之一,尤其是在数据分析、报表生成或数据迁移等领域。本教程将详述如何使用Apache POI库读取Excel数据,并通过Java的JDBC接口批量插入到MySQL数据库中。Apache POI是Java平台上...

    Java_批量导出大数据量Excel方法.zip

    在Java开发中,批量导出大数据量到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据交换场景下。为了高效地处理这种情况,开发者通常需要掌握一些特定的技术和策略。本资料"Java_批量导出大数据量Excel方法...

    使用POI从数据库导出对应EXCEL格式数据

    为解决这个问题,POI提供了一个叫做SXSSF的API,它是基于SXSSF(Streaming Usermodel API)的,可以处理大型数据集而不占用大量内存。 6. **网页下载流程**: 在Web应用中,当用户触发导出操作时,后台生成Excel...

Global site tag (gtag.js) - Google Analytics