java POI 写入百万数据到 excel

.xls文件只支持6w+的数据写入

.xlsx文件只支持104w+数据的写入

在java中jxl工具类只能操作.xls的文件,不能操作.xlsx的文件

POI工具类能够支持.xlsx的文件操作。

excel的数据读写都相应的简单,网上也有很多的代码,我这里要说的是怎么样写入100w+的数据到Excel中。

在POI中,XSSFWorkbook  wb = new XSSFWorkbook ();创建的工作簿能够写入大量的数据,但很大的可能下会虚拟机内存不够而报错

在这种情况下有两种解决方案:

1.重新分配java 虚拟机内存(我没有试验)

2.POI中还提供了SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);代码的创建工作,第一个参数是XSSFWorkbook  wb = new XSSFWorkbook ();第二个参数是内存中处理的数据行数,当数据量超过你所设置的数量,会把多的数据保存到磁盘上。

这里提供一个简单写入excel文件的代码段:

public static void createWorkBook(List<Entity> dataList,String filename) throws IOException {
        System.out.println("数据数量=="+dataList.size());
    	//创建excel工作簿
        XSSFWorkbook  wb = new XSSFWorkbook ();
        SXSSFWorkbook swb=new SXSSFWorkbook(wb,10000);
        //swb.createSheet()
        //创建第一个sheet(页),命名为 new sheet
        SXSSFSheet sheet = null;
        sheet = (SXSSFSheet) swb.createSheet("myData");
        //Row 行
        //Cell 方格
        // Row 和 Cell 都是从0开始计数的 

        for(int i=0;i<dataList.size();i++)
        {
        	Entity en=dataList.get(i);
        	// 创建一行,在页sheet上
        	Row row = sheet.createRow(i);
            // 在row行上创建一个方格
            /*org.apache.poi.ss.usermodel.Cell cell =  row.createCell(0);
            //设置方格的显示
            cell.setCellValue(1); */
        	//System.out.println(en.getPkg_name());
        	//row.createCell(0).setCellValue("xx");
            row.createCell(0).setCellValue(en.getDate());
            // Or do it on one line.
            row.createCell(1).setCellValue(en.getxxx());
            row.createCell(2).setCellValue(en.getxxx()());
            row.createCell(3).setCellValue(en.getxxx()());
            row.createCell(4).setCellValue(en.getxxx()());
            ......

        }

        //创建一个文件 命名为workbook.xls
        FileOutputStream fileOut = new FileOutputStream(filename);
        // 把上面创建的工作簿输出到文件中
        swb.write(fileOut);
        //关闭输出流
        fileOut.close();
        System.out.println("写入完成----");
    }

  

时间: 2024-08-26 10:55:07

java POI 写入百万数据到 excel的相关文章

java poi 写入大量数据到excel中

最近在利用poi往excel中写入大量数据时,发现excel2003最多只支持65535条,大量数据时容易造成oom,上网查了一下api,发现目前对于2003,每个sheet最多支持65535条,若数据量远超65535,建议分sheet处理,而poi3.8之后,出现了SXSSFWorkbook,可以支持大数据量的写入excel操作,但是目前只支持excel2007 HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML

使用poi导出大量数据到excel遇到的问题

最近在工作遇到利用poi导出大量数据到excel并提供下载的运用场景,并遇到了一个问题,当数据量过大时(几十万),后台在进行数据写入excel中的过程会非常耗时,导致迟迟没有响应前台,结果数据还没导完,前台页面就已经崩掉了. 解决思路:接收到前台导出excel请求之后,开一个线程,在线程里进行数据的写入和将写入完成的excel保存到服务器中等耗时操作,前台定时发送ajax请求检测是否已经导出完成,如果完成则提供一个下载链接到前台供用户下载. 想到解决思路之后,自己写了一个小demo,顺便学习下利

POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384列. excel2003是以二进制的方式存储,这种格式不易被其他软件读取使用:而excel2007采用了基于XML的ooxml开放文档标准,ooxml使用XML和ZIP技术结合进行文件存储,XML是一个基于文本的格式,而且ZIP容器支持内容的压缩,所以其一大优势是可以大大减小文件的尺寸. 2. 大批

Java实现Oracle导出数据到Excel

1.导入相应的jar包(jxl.jar 和 数据库连接的jar包) 2.写数据库连接的工具类 import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException; public class Dbutil {    /*     * 功能:编写一个静态方法用于与数据库建立连接 输入参数:无 返回值:数据库连接对象     */ 

POI 导出大批量数据的Excel

POI作为操作Excel的三方库应用广泛,本文着重讨论导出大批量数据的Excel的处理,版本为4.1.0: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.0</version> </dependency> 使用HSSFWorkbook进行导出,示例代码如下,代码中导出5万行20列的

POI读写大数据量EXCEL

大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较多,但是很少提到读写非常大数据量的excel的例子,POI官网上提到XSSF有三种读写excel,POI地址:http://poi.apache.org/spreadsheet/index.html.官网的图片: 可以看到有三种模式: 1.eventmodel方式,基于事件驱动,SAX的方式解析excel(.xlsx是基于OOXML的),CPU和内存消耗非常低,但是只能读不能写 2.usermodel,就是我们一般使用的方

关于poi导出大数据量EXCEL导出缓慢的解决方案--生成xml格式的表格文件

今天遇到了一个POI导出EXCEL文件结果文件大小太大导致系统运行缓慢的问题.想到了使用输出XML格式的表格来完成. 首先,我们需要理解一下为什么POI导出EXCEL文件会导致文件大小变大.最主要的原因应该是POI变成中经常会对无关的单元格设置属性.例如:一个EXCEL工作表的最大列数为256,我们只使用10列.而编程时经常会将256列全部渲染格式,造成很大的资源浪费.当然应该还有其他很多原因也会造成表格变大. 使用这个方案的前提是对于表格的格式要求不高,因为使用的是自己的工具,没有POI优化了

Java使用POI实现数据导出excel报表

在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF .所以今天我们来简单看一下利用Apache  POI实现数据库中数据导出excel报表.在java中有很多实现数据导出excel报表的第三方jar包.但在比较了一下感觉还是POI相对来

解决java poi导出excel2003不能超过65536行的问题

java poi在导出数据到excel2003工作表中时一个工作表只能存储65536行数据,如果超过这个数据就会失败,excel2007并没有这个问题,但是为了兼容性我们通常都是导出到2003版本上的. 1.导出成xlsx格式. 2.达到某个数值就再创建一张工作表. /** * 如果达到50000条数据则重新创建工作表的逻辑 */ @Override public void exportExcel(List<HolidayItemForm> formList, ServletOutputStr