在使用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