`

POI处理大数据量以及超大数据量的导出

    博客分类:
  • POI
 
阅读更多
3.8版本的POI对excel的导出操作,一般只使用HSSFWorkbook以及SXSSFWorkbook,HSSFWorkbook用来处理较少的数据量,SXSSFWorkbook用来处理大数据量以及超大数据量的导出。
	    3.8版本的POI新出来了SXSSFWorkbook,可以支持大数据量的操作,只是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。 
        DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    	Random rand = new Random();
     	// 导出Excel文件名
        String xlsName = "xxx_"+df.format(new Date())+rand.nextInt(100)+".xlsx";
        //创建excel文件,内存只有100条记录
        Workbook wb = new SXSSFWorkbook(100); 
        //一个sheet存储的记录条数
        int record = 5000;
        //总记录数
        int recordTotal = listtemp.size();
        //sheet个数(循环几次就有几个sheet,1个sheet存放5000条数据)
        int shTotal = recordTotal % EXCEL_SHEETRECORD == 0?recordTotal/EXCEL_SHEETRECORD:recordTotal/EXCEL_SHEETRECORD + 1;
        //最后一个sheet中记录的条数
	    int lastRecord = recordTotal % EXCEL_SHEETRECORD == 0?record:recordTotal % EXCEL_SHEETRECORD;
	    for(int shIndex = 0; shIndex < shTotal; shIndex++){
			// 创建工作表 
	        Sheet sh = wb.createSheet("sheet"+shIndex);
	    	//最后一个sheet
			if(shIndex == shTotal - 1){
		        // 写表头 创建第一行(表头,即列名)
		        Row row = sh.createRow((short)0);
		        // 给列添加名字
		        row.createCell((short)0).setCellValue("xxx");
		        row.createCell((short)1).setCellValue("xxx");
		        row.createCell((short)2).setCellValue("xxx");
		        row.createCell((short)3).setCellValue("xxx");		        // 数据写入EXCEL
		        for(short i = 0 ; i < lastRecord ; i++){
		        	// 创建数据行
		        	Row rowTmp = sh.createRow((short)(i+1));
		        	//最后一个sheet的记录的索引
		        	int ii = EXCEL_SHEETRECORD * shIndex + i;
		        	// 得到一个对象(即一条记录)
		        	Object[] oj = listtemp.get(ii);
			        // Create a cell and put a value in it.
			        rowTmp.createCell((short)0).setCellValue((oj[1]==null || oj[1].toString().equals(""))?"":oj[1].toString());
			        rowTmp.createCell((short)1).setCellValue((oj[2]==null || oj[2].toString().equals(""))?"":oj[2].toString());
			        rowTmp.createCell((short)2).setCellValue((oj[3]==null || oj[3].toString().equals(""))?"":oj[3].toString());
			        rowTmp.createCell((short)3).setCellValue((oj[4]==null || oj[4].toString().equals(""))?"":oj[4].toString());
			        			    }
			}else{
				// 写表头 创建第一行(表头,即列名)
		        Row row = sh.createRow((short)0);
		        // 给列添加名字
		        row.createCell((short)0).setCellValue("xxx");
		        row.createCell((short)1).setCellValue("xxx");
		        row.createCell((short)2).setCellValue("xxx");
		        row.createCell((short)3).setCellValue("xxx");		        // 数据写入EXCEL
		        for(short i = 0 ; i < listtemp.size() ; i++){
		        	// 创建数据行
		        	Row rowTmp = sh.createRow((short)(i+1));
		        	//第shIndex个sheet的记录的索引
		        	int ii = EXCEL_SHEETRECORD * shIndex + i;
		        	// 得到一个对象(即一条记录)
		        	Object[] oj = listtemp.get(ii);
			        // Create a cell and put a value in it.
			        rowTmp.createCell((short)0).setCellValue((oj[1]==null || oj[1].toString().equals(""))?"":oj[1].toString());
			        rowTmp.createCell((short)1).setCellValue((oj[2]==null || oj[2].toString().equals(""))?"":oj[2].toString());
			        rowTmp.createCell((short)2).setCellValue((oj[3]==null || oj[3].toString().equals(""))?"":oj[3].toString());
			        rowTmp.createCell((short)3).setCellValue((oj[4]==null || oj[4].toString().equals(""))?"":oj[4].toString());
			        			    }
			}
	    }
        
        HttpServletResponse response = ServletActionContext.getResponse();
        //指定输出文件名
        response.setHeader("Content-Disposition","attachment;filename=" + xlsName); 
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        OutputStream os = null;        
    	try {
			os = response.getOutputStream();
			wb.write(response.getOutputStream());
			os.flush();
			os.close();
		} catch (IOException e) {
		}

 

 

 

 

分享到:
评论

相关推荐

    使用POI导出大数据量到EXCEL

    "使用POI导出大数据量到EXCEL"这个主题涉及到如何高效地利用POI处理大量数据并将其导出到Excel文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...

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

    【作品名称】:基于Apache POI导出大数据量(百万级)Excel的实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:...

    java使用poi导出大量数据

    本篇文章将深入探讨如何利用POI高效地处理大数据量的导出。 首先,我们需要了解`DBUtil.java`和`LotExport.java`两个文件可能在项目中的作用。`DBUtil.java`通常包含了数据库操作的相关工具方法,比如连接数据库、...

    java poi导出大量数据到Excel

    1. **内存优化**:当数据量非常大时,建议使用Apache POI提供的SXSSF类来降低内存占用。 2. **性能考虑**:在实际应用中,应尽可能减少对Excel文件的读写操作,避免频繁创建和销毁对象。 3. **异常处理**:在处理...

    POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm

    POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm

    解决poi大数据量导出excel的代码

    解决poi大数据量导出excel的代码,该代码中所用的jar包是poi3.9。在测试过程中单个sheet中导出20万数据没有问题。

    Java读取大数据量Excel的方法(POI)

    在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...

    使用poi导出大数据量excel

    Java实现大数据量导出时,如果使用普通的POI导出会出现内存溢出等情况,该方法解决了此问题,项目中使用该方法导出67000条数据需要21秒,数万条数据导出,本人认为效率还算可以,推荐给大家

    POI处理大数据量的Excel文件, 不内存溢出

    从http://download.csdn.net/detail/whatismvc/3696185 和http://download.csdn.net/detail/whatismvc/3694229 下载的, 处理大数据量的Excel 2007文件不内存溢出,我试过的最大数据是 26000行,222列的xlsx。

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

    3. **流式处理**: 使用POI的SXSSFWorkbook类可以实现流式处理,它会将数据写入磁盘,而不是内存,这对于大数据量导出非常有用。SXSSFWorkbook是一个低内存占用的API,它在后台维护一个有限大小的内存缓存,并将超出...

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

    在处理大数据量时,将数据导出为Excel文件是一项常见的需求,特别是在数据分析、报表生成以及数据交换等场景中。Apache POI是一个强大的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel...

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

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

    java poi大数据量 导出excel

    java中使用poi导出Excel大批量数据 存在两个导出方法:存在一个分批量导出ZIP文件,一个导出exel文件

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

    在描述中提到,“经测试导出23万数据耗时在3min左右”,这表明POI库在处理大规模数据导出时具有较好的性能。它可能采用了分批次写入或者优化的内存管理策略,以减少内存占用并提高处理速度。同时,提及的“使用方法...

    java中使用poi导出Excel大批量数据到客户端

    在java web系统应用中我们经常会用到大批量数据的导出,动辄就上几十万几百万的数据让我们的程序感觉压力很大,甚至都出现无法导出的情况,如内存溢出等。 java中使用poi导出Excel大批量数据到客户端 存在两个导出...

    poi导出数据到excel里

    在这个场景中,"poi导出数据到excel里"指的是使用Apache POI库在Java项目中将数据写入Excel文件的过程。这个功能在数据分析、报表生成或者数据导出等场景中非常常见。以下是对Apache POI导出数据到Excel的详细解释:...

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

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

    poi多线程大数据导出excel文件.zip

    在IT行业中,处理大数据量的Excel文件是一项挑战,特别是在数据导出时,如果单线程操作,可能会导致性能瓶颈和长时间的等待。Apache POI是一个流行的Java库,它允许开发者创建、修改和显示Microsoft Office格式的...

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...

    处理大数据量excel

    在IT行业中,处理大数据量的Excel文件是一项常见的挑战,尤其对于数据分析、数据处理以及报告生成等领域。Excel虽然作为个人和小团队的数据管理工具非常实用,但当数据量达到一定规模时,其性能会显著下降。这篇博文...

Global site tag (gtag.js) - Google Analytics