easypoi 大批量导出(二)

框架背景:

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-annotation</artifactId>
    <version>4.0.0</version>

我在前文,如何解决easypoi导出大数据量的问题中说调用easypoi自带的导出大数据量的方法,分批导出后合并成一个sheet 导出。

for (int i = 0; i < remoteCount; i++) {
    //组装导出信息
    List<ContractExcelVO> contractExcelVOS = new ArrayList<>();
    ExportParams exportParams = new ExportParams();
    exportParams.setType(ExcelType.XSSF);
    exportParams.setTitle("合同信息");
    //导出多个表格
    workbook = ExcelExportUtil.exportBigExcel(exportParams, ContractExcelVO.class, contractExcelVOS);
}

那么它是怎么实现的呢?? ?

1.使用ThreadLocal把导出的类通过线程的维度记录下来,这样就能使得每次调用的上下文都保持一致,而这时导出的workbook 对象就可以重复设置。

2.在获取ExcelBatchExportService 对象时,如果是第一次获取则初始化上下文的一些数据,这时WorkBook 也会被创建。之后每次用到的都是这个workBook。

3.获取到ExcelBatchExportService对象后,调用appendData 方法,而在这里可以看到,开头就是对sheet 的长度判断,如果大于sheet的最大长度,则重新创建一个新的sheet 来导出对应的数据。

4.至此我们就弄清楚了为什么我们只需要循环调用这个方法就能自动的将所有的数据导入到一个表格里面输出了。

workbook = ExcelExportUtil.exportBigExcel(exportParams, ContractExcelVO.class, contractExcelVOS);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值