登陆

EasyExcel配合POI完成分组操作

admin 2022-11-25 16人围观 ,发现0个评论

在工作中遇到这样一个需求,需要将Excel进行列分组与行分组,如下图所示

image.png 点击按钮之后,可以进行分组展示

image.png

image.png

那么我们需要如何进行分组操作呢?

EasyExcel中并没有相对应的分组操作,但是EasyExcel是基于POI进行开发的,EasyExcel中支持POI

因此我们可以通过EasyExcel配合POI来进行分组

EasyExcel中可以设置各种Handler,如CellWriteHandler(单元格),SheetWriteHandler(Sheet页)

我们可以自定义一个Handler,来进行分组操作

Handler中定义了如下的方法,我们拿CellWriteHanlder举例

image.png

我们采用最后一个 afterCellDispose(在单元格处置之后)

那么让我们开始自定义一个我们自己的CellWriteHandler

package com.sgm.cadillac.mobile.easyexcel.handler;

import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; import com.alibaba.excel.write.metadata.style.WriteCellStyle; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.BorderStyle; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFColor;   import java.awt.*;   @Slf4j public class MyCellWriteHandler implements CellWriteHandler {              @Override     public void afterCellDispose(CellWriteHandlerContext context) {         }   } 复制代码

每当EasyExcel输出一个单元格之后都会到这个Handler里面执行你的代码,因此你可以在这里进行分组(不能采用SheetWriteHandler来进行行分组 Sheet比Cell先创建)

现在我们就可以进行分组了

  WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();   Sheet sheet = writeSheetHolder.getSheet();   //进行列分组   sheet.groupColumn(x, x);   //进行行分组   sheet.groupRow(x, x); 复制代码

以上只是简单的写死了分组,一般我们需要用逻辑分组,那么我们可以自定义这个CellWriteHandler的构造函数,传入我们进行逻辑计算分组的数据,这样我们就可以进行分组了

注意:POI分组默认只能分一百条数据,如果我们数据操作一百条,那么他就会只进行最后一百条的分组。

通过研究发现,我们可以开启EasyExcel的这个参数来解除限制,官方API文档显示如下:

我们需要设置这个参数为Ture,否则分组只能分一百条

ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).inMemory(true).build() 复制代码
请发表您的评论
请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP