SXSSFWorkbook读取文件不能追加数据

        今天记录一个问题,就是用SXSSFWorkbook读取文件之后,不能在原有的sheet页追加内容的问题。

        读取文件:

        SXSSFWorkbook wb = new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream(new File("D:\\temp\\export.xlsx"))), 100);

        获取第一页sheet:

        Sheet sheetAt = wb.getSheetAt(0);

        本来想着在第一页继续追加数据的,但是debug发现sheetAt的数据size = 0,拿不到。(后来发现是因为数据都保存在硬盘)

        最后发现好像只能创建一个新的Sheet来保存数据。 Sheet sh = wb.createSheet();

然后在继续追加数据就行了。

        今天,发现可以通过:XSSFSheet sh = wb.getXSSFWorkbook().getSheetAt(0);这样的方式拿到指定的sheet页,sh.getLastRowNum()也能拿到数据,之后就继续追加。但是后面不能把数据刷到磁盘上面了,((SXSSFSheet) sh).flushRows(maxBuff)报错,因为XSSFSheet 不能转换。

        注意:new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream(new File("D:\\temp\\export.xlsx"))), 100); 这玩意很坑,因为必须通过XSSFWorkbook来读取文件,所以导致每次读的时候数据都写在内存里面,就可能会导致OOM。

        本来原来想法是封装一个工具类,之后,用的时候调用。这样分批插入的时候就必须判断文件是否存在,不存在就直接new SXSSFWorkbook(100),存在就 new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream(new File("D:\\temp\\export.xlsx"))), 100),然后创建新的sheet来添加数据,但是后面超过25w数据就oom了。

        解决方法:1、网上说的可以用easyExcel ;2、不要封装成工具类了,就直接单独处理导出,虽然代码冗余,但是不会出现oom        

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值