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

转载!!!java操作Excel导出大数据量解决方案

poi 
阅读更多
看过很多关于Excel导出时出现内存溢出的情况,也有很多解决方案。现提供如下解决方案,如有不妥,请指正:
    该项目使用B/S架构,由于POI、JXL在导出excel大数据量情况下会产生大量对象最终导致内存溢出。其实Excel可以另存为html文件,保存为html后的文件内容如下: Html代码
<html xmlns="urn:schemas-microsoft-comfficeffice" 
xmlns:x="urn:schemas-microsoft-comffice:excel" 
xmlns="http://www.w3.org/TR/REC-html40"> 
 
<head> 
<meta http-equiv=Content-Type content="text/html; charset=gb2312"> 
<meta name=ProgId content=Excel.Sheet> 
<meta name=Generator content="Microsoft Excel 11"> 
……样式信息……  
<body link=blue vlink=purple> 
<table x:str border=0 cellpadding=0 cellspacing=0 width=620 style='border-collapse:  
collapse;table-layout:fixed;width:466pt'> 
<col width=129 style='mso-width-source:userset;mso-width-alt:4128;width:97pt'> 
<col class=xl25 width=72 span=2 style='width:54pt'> 
<col class=xl25 width=63 style='mso-width-source:userset;mso-width-alt:2016;  
width:47pt'> 
<col class=xl25 width=118 style='mso-width-source:userset;mso-width-alt:3776;  
width:89pt'> 
<col width=166 style='mso-width-source:userset;mso-width-alt:5312;width:125pt'> 
<tr height=19 style='height:14.25pt'> 
  <td height=19 class=xl24 width=129 style='height:14.25pt;width:97pt'>字段1</td> 
  <td class=xl24 width=72 style='width:54pt'>字段2</td> 
  <td class=xl24 width=72 style='width:54pt'>字段3</td> 
  <td class=xl24 width=63 style='width:47pt'>字段4</td> 
  <td class=xl24 width=118 style='width:89pt'>字段5</td> 
  <td width=166 style='width:125pt'></td> 
</tr> 
……数据……  
<![if supportMisalignedColumns]> 
<tr height=0 style='display:none'> 
  <td width=129 style='width:97pt'></td> 
  <td width=72 style='width:54pt'></td> 
  <td width=72 style='width:54pt'></td> 
  <td width=63 style='width:47pt'></td> 
  <td width=118 style='width:89pt'></td> 
  <td width=166 style='width:125pt'></td> 
</tr> 
<![endif]> 
</table> 
</body> 
</html> 

<html xmlns="urn:schemas-microsoft-comfficeffice"
xmlns:x="urn:schemas-microsoft-comffice:excel"
xmlns="http://www.w3.org/TR/REC-html40">


<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content="Microsoft Excel 11">
……样式信息……
<body link=blue vlink=purple>
<table x:str border=0 cellpadding=0 cellspacing=0 width=620 style='border-collapse:
collapse;table-layout:fixed;width:466pt'>
<col width=129 style='mso-width-source:userset;mso-width-alt:4128;width:97pt'>
<col class=xl25 width=72 span=2 style='width:54pt'>
<col class=xl25 width=63 style='mso-width-source:userset;mso-width-alt:2016;
width:47pt'>
<col class=xl25 width=118 style='mso-width-source:userset;mso-width-alt:3776;
width:89pt'>
<col width=166 style='mso-width-source:userset;mso-width-alt:5312;width:125pt'>
<tr height=19 style='height:14.25pt'>
  <td height=19 class=xl24 width=129 style='height:14.25pt;width:97pt'>字段1</td>
  <td class=xl24 width=72 style='width:54pt'>字段2</td>
  <td class=xl24 width=72 style='width:54pt'>字段3</td>
  <td class=xl24 width=63 style='width:47pt'>字段4</td>
  <td class=xl24 width=118 style='width:89pt'>字段5</td>
  <td width=166 style='width:125pt'></td>
</tr>
……数据……
<![if supportMisalignedColumns]>
<tr height=0 style='display:none'>
  <td width=129 style='width:97pt'></td>
  <td width=72 style='width:54pt'></td>
  <td width=72 style='width:54pt'></td>
  <td width=63 style='width:47pt'></td>
  <td width=118 style='width:89pt'></td>
  <td width=166 style='width:125pt'></td>
</tr>
<![endif]>
</table>
</body>
</html>

    至此,可通过数据生成如上格式的HTML文本信息则避开大量对象的建立,如果将该HTML直接以application/excel返回浏览器时则Excel文件会比普通大一点,可以通过配置过滤器对该HTML进行压缩即可,如下:
Java代码
      
response.reset();   
response.setContentType("application/zip;charset=GBK");  
String s = "查询-" + new java.sql.Date(System.currentTimeMillis()).toString().replaceAll("-","") + ".xls";  
String filename = s + ".zip";  
response.addHeader("Content-Disposition", "inline;filename=" + filename); 

       
response.reset();
response.setContentType("application/zip;charset=GBK");
String s = "查询-" + new java.sql.Date(System.currentTimeMillis()).toString().replaceAll("-","") + ".xls";
String filename = s + ".zip";
response.addHeader("Content-Disposition", "inline;filename=" + filename);
分享到:
评论

相关推荐

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

    在Java开发中,批量导出大数据量到...通过以上方法,开发者可以构建一个高效且健壮的Java批量导出大数据量到Excel的解决方案。具体实现细节可能在提供的excelproj和ExpXLS文件中有所体现,建议解压后仔细研究源代码。

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

    - 使用如JExcelApi、OpenCSV等其他第三方库,它们可能提供了更优化的数据导出方案,尤其是针对大数据量。 7. **优化Excel文件格式**: - 如果可能,可以考虑使用CSV格式代替Excel,因为CSV文件对内存的需求较低,...

    java excel大数据量导出demo,可支持模板导出

    这个"java excel大数据量导出demo"提供了一个高效、灵活的解决方案,它支持模板导出,分页查询,以及处理大数据量的能力。在这个项目中,开发者采用了Apache POI库的SXSSFWorkbook子类,这是一个专门为处理大量数据...

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

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

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

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

    多个excel导出压缩成zip 文件 数据量大导出

    "多个Excel导出压缩成zip文件"的场景通常是为了解决数据量过大导致的文件管理不便、传输效率低以及存储空间占用过多等问题。下面我们将深入探讨这个话题,主要涵盖以下几个方面: 1. **大数据量导出**: - 当数据...

    使用POI导出大数据量到EXCEL

    通过以上步骤,我们可以在Java中使用Apache POI实现大数据量的Excel导出。实际开发中,可能还需要考虑如数据分页、数据过滤、多线程处理等高级功能,以进一步提高性能和用户体验。记得在使用完毕后释放资源,如关闭...

    java实现csv导出千万级数据实例

    本实例聚焦于“java实现csv导出千万级数据实例”,旨在提供一个高效、稳定的解决方案,避免因数据量过大而导致的性能问题,如Java中的栈溢出(Stack Overflow)。CSV(Comma Separated Values)格式因其简单、通用性...

    Java使用POI导出大数据量Excel的方法

    总结来说,Java使用POI的SXSSFWorkbook类可以有效地处理大数据量Excel导出,通过硬盘缓存减少内存使用。理解其工作原理并适当优化,能够在保持性能的同时,避免系统资源的过度消耗。在开发过程中,遇到此类问题时,...

    Java、Excel导出

    6. **大数据量导出** 当处理大量数据时,一次性导出可能会导致内存溢出。为解决此问题,可以采用分片导出,将数据分成多个文件或工作表。使用`HSSFWorkbook.write()`方法时,可以边导出边写入输出流,例如`...

    Java 导出Excel.zip

    "Java 导出Excel.zip"这个压缩包文件提供了一个Java实现的解决方案,允许开发者以全泛型的方式方便地导出数据到Excel文件,而且支持动态创建不同数量的sheet页面,增强了灵活性。 1. **Java与Excel交互**:Java中...

    Java实现Excel导入导出操作详解.pptx.pptx

    另外,EasyExcel是一个高效且强大的库,采用流式读写模式,特别适合处理大数据量的Excel文件。 使用Apache POI进行Excel导入操作,首先要加载Excel文件,然后遍历并读取所需数据。例如,可以创建` FileInputStream ...

    java web开发中大量数据导出Excel超时(504)问题解决

    在Java Web开发中,当需要将大量数据导出到Excel文件时,可能会遇到超时(如504错误)的问题。这种问题通常是由于服务器处理时间过长,超过了Web服务器或应用服务器设置的超时限制。以下是一些解决此类问题的方法和...

    在excel的一个sheet中导出大批量数据>20万

    7. **云解决方案**:如果资源允许,可以考虑使用云服务,如Google Sheets或Microsoft Excel Online,它们通常提供了更大的存储空间和计算能力。 综上所述,要高效地导出Excel中超过20万条的数据,关键在于选择合适...

    java 大数据导出csv小工具

    这可能是通过多线程或多进程的方式实现,使得在导出大数据量时能提高效率。同时,它特别强调了对Oracle数据库的支持,Oracle是一种广泛使用的商业关系型数据库管理系统,这表明该工具能够从Oracle数据库中提取数据并...

    Java操作Excel解决方案.docx

    ### Java操作Excel解决方案 #### 一、概述 在日常开发工作中,经常需要处理Excel文件,尤其是在企业级应用中。为了方便地实现Excel的导入导出功能,本文将介绍如何使用Apache POI库来操作Excel文件。Apache POI是...

    java 导入导出excel

    ### Java导入导出Excel知识点详解 #### 一、Jxl库概述 Jxl是一个用于Java应用程序处理Microsoft Excel文件的强大库...然而,在处理复杂或大规模数据时,可能需要评估其性能表现,并考虑是否有其他更适合的解决方案。

    excel导出 java文件直接用

    总的来说,这个Java解决方案旨在简化Excel导出流程,使得开发人员能够快速实现将数据导出为Excel文件的功能,而无需深入学习底层的文件格式或处理细节。对于任何处理大量数据或需要生成报告的Java应用程序来说,这都...

    easyExcel实现大数据导出

    `easyExcel`是专门为处理大量数据设计的一个轻量级工具,它能够有效地解决内存溢出问题,特别适合大数据量的Excel读写操作。下面将详细阐述`easyExcel`的核心功能、使用方法以及如何实现大数据导出。 `easyExcel`的...

Global site tag (gtag.js) - Google Analytics