使用POI3.8导出大数据excel方法(解决内存溢出)

工作中遇到大数据导出excel内存溢出的问题,在使用jxl和POI3.8之前的版本都找不到很好的解决办法,通过设置jvm内存效果也不理想。但是在POI3.8以上版本中提供了SXSSFWorkbook的新类,可以通过参数设置常驻内存中的行数,防止OOM异常!
但是SXSSFWorkbook仅仅支持excel2007格式,也就是说SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。在写入excel时,需要生成大量的数据的时候,通过刷新的方式将excel内存信息刷新到硬盘的方式,提供写入数据的效率。以下是导出的例子:

import junit.framework.Assert;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

    public static void main(String[] args) throws Throwable {
        SXSSFWorkbook wb = new SXSSFWorkbook(100); //设置最大行数,如果不想做限制可以设置为-1
        Sheet sh = wb.createSheet();
        for(int rownum = 0; rownum < 1000; rownum++){
            Row row = sh.createRow(rownum);
            for(int cellnum = 0; cellnum < 10; cellnum++){
                Cell cell = row.createCell(cellnum);
                String address = new CellReference(cell).formatAsString();
                cell.setCellValue(address);
            }

        }

        // Rows with rownum < 900 are flushed and not accessible
        for(int rownum = 0; rownum < 900; rownum++){
          Assert.assertNull(sh.getRow(rownum));
        }

        // ther last 100 rows are still in memory
        for(int rownum = 900; rownum < 1000; rownum++){
            Assert.assertNotNull(sh.getRow(rownum));
        }
        
        FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");
        wb.write(out);
        out.close();

        // dispose of temporary files backing this workbook on disk
        wb.dispose();
    }
但是有些客户要求是2003excel,当导大数据是就比较复杂,下面的连接是我在网上看的一些资料,网上的做法大多数是分批导出之后再打包成压缩文件供用户下载,也有的是导出后再合并多个excel文件的方式!!

http://blog.csdn.net/yrsheng/article/details/4100393

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
poi3.9是Apache POI框架的一个版本,可以用于在大数据环境中导出Excel文件。使用poi3.9进行大数据Excel导出有以下几个步骤。 首先,导入poi3.9的相关 jar 包。这些 jar 包包括 poi-3.9.jar、poi-ooxml-3.9.jar、poi-ooxml-schemas-3.9.jar 和 xmlbeans-2.3.0.jar。 然后,创建一个工作簿(Workbook)对象,可以使用 HSSFWorkbook 或者 XSSFWorkbook,分别代表用于处理 .xls 和 .xlsx 格式的工作簿。 接下来,创建一个工作表(Sheet)对象,可以使用 createSheet 方法来创建一个新的工作表。该方法返回一个 Sheet 对象,可以对工作表进行进一步的操作。 然后,在工作表中创建行(Row)对象,可以使用 createRow 方法。该方法返回一个 Row 对象,可以添加单元格(Cell)。 然后,在每一行中创建单元格,可以使用 createCell 方法。该方法根据所需的数据类型(数值、字符串等)创建一个单元格,并将其添加到行中。 接着,将数据填充到单元格中,可以使用 setCellValue 方法。根据数据类型的不同,可以使用 setCellValue 方法设置不同类型的数据,例如 setCellValue(String value)、setCellValue(int value) 等。 最后,使用 FileOutputStream 将工作簿写入到磁盘上的文件中。可以创建一个文件输出流(FileOutputStream)对象,将工作簿写入到指定的文件路径中。 综上所述,使用poi3.9进行大数据Excel导出需要导入相关的jar包,创建工作簿和工作表对象,创建行和单元格对象,并将数据填充到单元格中,最后将工作簿写入到磁盘文件中。这样就可以在大数据环境中成功进行Excel导出了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值