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文件中。以下是对这个主题的详细讲解。 1. **Apache POI简介** Apache POI 是一个开源项目,它提供了Java API来创建、...
【作品名称】:基于Apache POI导出大数据量(百万级)Excel的实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:...
本篇文章将深入探讨如何利用POI高效地处理大数据量的导出。 首先,我们需要了解`DBUtil.java`和`LotExport.java`两个文件可能在项目中的作用。`DBUtil.java`通常包含了数据库操作的相关工具方法,比如连接数据库、...
1. **内存优化**:当数据量非常大时,建议使用Apache POI提供的SXSSF类来降低内存占用。 2. **性能考虑**:在实际应用中,应尽可能减少对Excel文件的读写操作,避免频繁创建和销毁对象。 3. **异常处理**:在处理...
POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm
解决poi大数据量导出excel的代码,该代码中所用的jar包是poi3.9。在测试过程中单个sheet中导出20万数据没有问题。
在Java编程中,处理大数据量的Excel文件是一项挑战,因为Excel文件可能包含成千上万行数据。Apache POI是一个流行的库,专为处理Microsoft Office文档(如Excel)而设计,它提供了API来读取、写入和修改这些文件。在...
Java实现大数据量导出时,如果使用普通的POI导出会出现内存溢出等情况,该方法解决了此问题,项目中使用该方法导出67000条数据需要21秒,数万条数据导出,本人认为效率还算可以,推荐给大家
从http://download.csdn.net/detail/whatismvc/3696185 和http://download.csdn.net/detail/whatismvc/3694229 下载的, 处理大数据量的Excel 2007文件不内存溢出,我试过的最大数据是 26000行,222列的xlsx。
3. **流式处理**: 使用POI的SXSSFWorkbook类可以实现流式处理,它会将数据写入磁盘,而不是内存,这对于大数据量导出非常有用。SXSSFWorkbook是一个低内存占用的API,它在后台维护一个有限大小的内存缓存,并将超出...
在处理大数据量时,将数据导出为Excel文件是一项常见的需求,特别是在数据分析、报表生成以及数据交换等场景中。Apache POI是一个强大的Java库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel...
这个"java excel大数据量导出demo"提供了一个高效、灵活的解决方案,它支持模板导出,分页查询,以及处理大数据量的能力。在这个项目中,开发者采用了Apache POI库的SXSSFWorkbook子类,这是一个专门为处理大量数据...
java中使用poi导出Excel大批量数据 存在两个导出方法:存在一个分批量导出ZIP文件,一个导出exel文件
在描述中提到,“经测试导出23万数据耗时在3min左右”,这表明POI库在处理大规模数据导出时具有较好的性能。它可能采用了分批次写入或者优化的内存管理策略,以减少内存占用并提高处理速度。同时,提及的“使用方法...
在java web系统应用中我们经常会用到大批量数据的导出,动辄就上几十万几百万的数据让我们的程序感觉压力很大,甚至都出现无法导出的情况,如内存溢出等。 java中使用poi导出Excel大批量数据到客户端 存在两个导出...
在这个场景中,"poi导出数据到excel里"指的是使用Apache POI库在Java项目中将数据写入Excel文件的过程。这个功能在数据分析、报表生成或者数据导出等场景中非常常见。以下是对Apache POI导出数据到Excel的详细解释:...
总结来说,Java使用POI的SXSSFWorkbook类可以有效地处理大数据量Excel导出,通过硬盘缓存减少内存使用。理解其工作原理并适当优化,能够在保持性能的同时,避免系统资源的过度消耗。在开发过程中,遇到此类问题时,...
在IT行业中,处理大数据量的Excel文件是一项挑战,特别是在数据导出时,如果单线程操作,可能会导致性能瓶颈和长时间的等待。Apache POI是一个流行的Java库,它允许开发者创建、修改和显示Microsoft Office格式的...
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
在IT行业中,处理大数据量的Excel文件是一项常见的挑战,尤其对于数据分析、数据处理以及报告生成等领域。Excel虽然作为个人和小团队的数据管理工具非常实用,但当数据量达到一定规模时,其性能会显著下降。这篇博文...