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

本文介绍如何结合使用XSSFWorkbook与SXSSFWorkbook解决大数据量下Excel导出的问题,避免内存溢出,通过交替使用两种工作簿实现模板读取与数据装载。

使用的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.getXS
sxssfworkbook是Apache POI库中的一个类,用于读取Excel文件。它是一种基于事件模型的处理方式,能够处理大量数据而不会占用太多的内存。 要使用sxssfworkbook读取Excel文件,首先需要创建一个工作簿对象。可以使用以下代码来创建一个sxssfworkbook对象: ``` // 创建一个文件输入流对象 FileInputStream fis = new FileInputStream(new File("test.xlsx")); // 创建一个SXSSFWorkbook对象 SXSSFWorkbook wb = new SXSSFWorkbook(new XSSFWorkbook(fis), 1000); ``` 其中,第一个参数是文件输入流对象,指定要读取Excel文件。第二个参数是缓存区的大小,指定在处理Excel文件时一次读取的数据行数。 接下来,可以使用wb对象的getSheetAt()方法来获取要读取的工作表对象。例如,如果要读取第一个工作表,可以使用以下代码: ``` // 获取第一个工作表 SXSSFSheet sheet = wb.getSheetAt(0); ``` 然后,可以使用sheet对象的getRow()方法来获取行对象,使用row对象的getCell()方法来获取单元格对象,最后使用cell对象的getStringCellValue()方法来获取单元格的值。例如,如果要获取第一行第一列的单元格值,可以使用以下代码: ``` // 获取第一行第一列的单元格值 SXSSFRow row = sheet.getRow(0); SXSSFCell cell = row.getCell(0); String value = cell.getStringCellValue(); ``` 最后,记得在读取Excel文件后关闭文件输入流对象和工作簿对象,以释放资源。可以使用以下代码来关闭这些对象: ``` // 关闭文件输入流对象 fis.close(); // 关闭工作簿对象 wb.close(); ``` 以上就是使用sxssfworkbook读取Excel文件的基本流程。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值