EasyExcel进行分组操作(POI)

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

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

 

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

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

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

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

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

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

 我们采用最后一个 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()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值