Java POI Excel大数据量的导入导出

  1. 大数据量的导入

当Excel中的数据量超过10万行时,在用POI读取文件流时很容易引起失败,需要引入xlsx-streamer来进行资源的打开,剩下的处理同POI处理上百行数据量类似:filePath=>FileInputStream=>Workbook=>Sheet=>Row=>Cell=>Java反射获取值。

 
       com.monitorjbl
       xlsx-streamer
       1.2.1
  

使用StreamingReader来进行对Workbook的获取。需要注意主要针对超过10万行要解析的Excel的Workbook获取,缓存到内存中的行数默认是10行,读取资源时缓存到内存的字节大小默认是1024,资源必须打开,File或者InputStream都可以,但是只能打开XLSX格式的文件。
public static Workbook obtainWorkbookByStream(String filePath) throws Exception {
      // StreamingReader用于读取Excel的内容,不能写入,不能随机读取Excel的内容
      FileInputStream in = new FileInputStream(filePath);
      Workbook workbook = StreamingReader.builder().rowCacheSize(100).bufferSize(4096).open(in);
      return workbook;
}

2. 大数据量的导出

对于大数据量的导出通常采用分而治之的思想,将大数据量分批次的导出到多个Excel文件或者单个Excel文件的多个sheet,也可导出到多个Excel文件后合并从单独的文件,其实现方式可参考:https://github.com/chunericli/xpt-excel-extension。

总结:大数据量的处理需要注意对内存使用的影响和对业务的影响。除非必要,要不然最好使用异步的方式进行处理,即首先保存文件元数据信息,然后分批次保存数据和分批次读取数据。

你可能感兴趣的:(Java技术进阶)