使用POI中的SXSSFWorkbook保存大数量级数据信息

在使用jxl保存excel数据时,经常碰到的问题就是保存的数据量太小,超过一定数据量(如7000条)时,就会报内存错误,原因在于所有的数据信息均被保存在内存中,数据量太大时java对象自然增多,内存自然就会出错了。使用poi的常规Excel操作也会出现同样的问题。
解决方法有许多种,比如将excel保存为xml文档,用户直接下载一个xml文档,然后使用excel打开。这种方式不便的就是用户需要显式地进行转换操作。不过值得高兴的是,最新的poi3.8版本,已经提供了以流的方式进行大数据量级的excel写入了。

使用的pom.xml文件如下所示:

              <dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.8</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.8-beta3</version>
		</dependency>

注意这里的poi-ooxml版本,一定是3.8-beta3版本,因为3.8正式版还没有。其中使用的写excel操作与常规的写法是一样的。比如如下代码:

  Workbook workbook = new SXSSFWorkbook();//最重要的就是使用SXSSFWorkbook,表示流的方式进行操作
		Sheet sheet = workbook.createSheet();
		int rows = 50000;
		int cols = 20;
		for(int row = 0;row < rows;row++) {
			Row writeRow = sheet.createRow(row);
			for(int col = 0;col < cols;col++) {
				org.apache.poi.ss.usermodel.Cell cell = writeRow.createCell(col);
				cell.setCellStyle(cellStyle);
				cell.setCellValue(row + "-" + col);
			}
		}

		FileOutputStream stream = new FileOutputStream("d:/x.xlsx");
		workbook.write(stream);//最终写入文件
		stream.close();

转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/java-programe/201207150001.html

相关文章:

作者: flym

I am flym,the master of the site:)

发表评论

邮箱地址不会被公开。 必填项已用*标注