poi+hutool导出excel addMergedRegion 合并行速度慢的问题

private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams, List<ExcelRowMergeParam> mergeParams) throws IOException {
        exportParams.setStyle(ExcelExportMyStylerImpl.class);
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
        Sheet sheet = workbook.getSheetAt(0);
        //四个参数依次是:起始行,终止行,起始列,终止列,index是从 0开始
        mergeParams.stream().forEach(excelRowMergeParam -> {
            CellRangeAddress craOne  = new CellRangeAddress(excelRowMergeParam.getRowStart(), excelRowMergeParam.getRowEnd(),excelRowMergeParam.getColStart(),excelRowMergeParam.getColEnd());
            sheet.addMergedRegion(craOne);
        });
        downLoadExcel(fileName, response, workbook);
    }

list 列表数组  pojoClass数组的实体类型,filename文件名称  response 返回体  exportParams标题头   mergeParams 合并参数列表

其他不予多说 mergeParams 是批量计算的形成数组的,我这边数量较大要几万个发现速度瓶颈在于上面代码的sheet.addMergedRegion(craOne)中,一万个需要一分多钟
改为sheet.addMergedRegionUnsafe(craOne)变得贼快 两秒就好,看了里面好像需要验证一些东西,特此记录


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用HutoolExcelUtil工具类可以很方便地导出Excel文件并合并单元格。 首先,需要引入HutoolExcelUtil类: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.hutool.poi.excel.cell.CellUtil; ``` 然后,创建一个ExcelWriter对象: ```java ExcelWriter writer = ExcelUtil.getWriter("output.xlsx"); ``` 接下来,可以设置表头和数据内容: ```java // 设置表头 writer.merge(0, "这是一个合并的单元格"); writer.writeHeadRow(Arrays.asList("姓名", "年龄", "性别")); // 设置数据 List<List<Object>> rows = new ArrayList<>(); rows.add(Arrays.asList("张三", 20, "男")); rows.add(Arrays.asList("李四", 25, "女")); rows.add(Arrays.asList("王五", 30, "男")); writer.write(rows); ``` 在设置表头时,使用`merge`方法合并单元格。该方法的第一个参数是要合并单元格号,第二个参数是要合并单元格的内容。 最后,需要关闭ExcelWriter对象: ```java writer.close(); ``` 完整示例代码如下: ```java import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.hutool.poi.excel.cell.CellUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExcelExportDemo { public static void main(String[] args) { // 创建ExcelWriter对象 ExcelWriter writer = ExcelUtil.getWriter("output.xlsx"); // 设置表头 writer.merge(0, "这是一个合并的单元格"); writer.writeHeadRow(Arrays.asList("姓名", "年龄", "性别")); // 设置数据 List<List<Object>> rows = new ArrayList<>(); rows.add(Arrays.asList("张三", 20, "男")); rows.add(Arrays.asList("李四", 25, "女")); rows.add(Arrays.asList("王五", 30, "男")); writer.write(rows); // 关闭ExcelWriter对象 writer.close(); } } ``` 执以上代码,就可以在当前目录下生成一个名为`output.xlsx`的Excel文件,并且第一的单元格被合并了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值