easyexcel复杂模板导出(合并行列,统计汇总)
为什么使用easyexcel
easyexcel官网地址: https://easyexcel.opensource.alibaba.com/docs/current/
项目之前一直使用Jxls进行excel导出,通过定义模板,导出时传入对应数据即可导出excel,使用起来还比较方便,项目上线1年之后,数据量越来越多,导出excel越来越慢,数据量再多点还会导致内存溢出服务重启,亟需优化。
调研之后,发现easyexcel满足如下两点
1. easyexcel可以通过模板导出(符合项目使用习惯)
2. easyexcel支持大数据量导出,性能较好(满足业务导出需求)
切换时一个业务导出需求
定义easyexcel模板
实现效果
代码实现
pom依赖导入
<!-- excel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
<!-- 解决jxls中poi版本冲突问题引入 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
版本说明
合并策略类
目前只支持行合并,列合并对merge方法进行扩展即可
package com.servingcloud.factoring.utils.excel;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import lombok.Data;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.List;
/**
* @author pengdy
* @desc easyexcel合并行列导出
*/
@Data
public class ExcelFillCellMergeStrategy extends AbstractMergeStrategy {
/**
* 分组,每几行合并一次
*/
private List<Integer> exportFieldGroupCountList;
/**
* 目标合并列index
*/
private Integer targetColumnIndex;
// 需要开始合并单元格的首行index
private Integer rowIndex;
public ExcelFillCellMergeStrategy(){
}
// exportDataList为待合并目标列的值
public ExcelFillCellMergeStrategy(List<Integer> exportFieldGroupCountList, Integer targetColumnIndex) {
this.exportFieldGroupCountList = exportFieldGroupCountList;
this.targetColumnIndex = targetColumnIndex;
}