在工作中遇到这样一个需求,需要将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() 复制代码
- 随机文章
- 热门文章
- 热评文章
- WindowsServer域的安装与卸载
- Laravel5.1框架中的ACL用户授权和权限检查功能的实现
- 如何删除朋友圈里的某个人
- python入门到网络编程
- 小程序自定义属性怎么获取的
- 微信小程序上传图片实战案例解析
- 2022年全球及中国预压接引线行业头部企业市场占有率及排名调研报告
- 使用npm仓库的优先级以及.npmrc配置文件的使用