XSSFWorkbook读取excel模板,SXSSFWorkbook导出大数据量 填坑

使用的POI版本为3.10.1,版本较老

项目里遇到需要读取特定模板,然后将数据装载在模板里导出的场景(之前用的都是XSSFWorkbook导出)。但是当你数据量过大时,官方XSSFWorkbook说最多导出65535行,但是个人实际操作后发现远远没到这个数量,两万左右就报OOM(内存溢出)了。

  因此,为了解决大数据量导出的问题,查完官方文档之后,可以使用SXSSFWorkbook导出。但是SXSSFWorkbook不能读取文件。也就是说我们无法读取模板的内容,因此需要将XSSFWorkbook与SXSSFWorkbook结合起来使用。

   官方文档里提供了 public SXSSFWorkbook(XSSFWorkbook workbook)构造方法,将XSSFWorkbook转为SXSSFWorkbook,

这是可以通过SXSSFWorkbook.getSheetAt(int index)获得sheet,但是再通过sheet.getRow(int rownum)去获得行时,会发现行数据为空,报空指针异常。

       经过多番查询之后,发现原因是因为这些记录存在于XSSFWorkbook中,你需要用sxssfWorkbook.getXSSFWorkbook()方法去获取初始模板的行数据。(操蛋)

      所以需要下面这么一个看起来有点傻屌的操作:

InputStream inp=ExcelUtil.class.getResourceAsStream("/template/xls/patBgRecord.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(inp);
SXSSFWorkbook swb = new SXSSFWorkbook(wb,100);
XSSFWorkbook xssfWorkbook = swb.getXSSFWorkbook();
XSSFSheet sheet = xssfWorkbook.getSheetAt(0);

然后你就可以拿着这个sheet,将你的模板中填充你的数据。

如果导出大数据量的表格,还是需要通过sxssfWorkbook创建一个sheet去导出。

Sheet sheetAt = swb.getSheetAt(0);

关键代码:

sxssfWorkbook,XSSFWorkbook 交替使用灵活使用

 

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值