一、背景
在后台项目中,经常会遇到将呈现的内容导出到Excel的需求,通过都是导出单个表头的Excel文件,如果存在级联关系的情况下,也就需要导出多表头的场景。今天这篇文章就是分享导出Excel单表头或多表头的实现,目前实现方案仅支持2行表头场景。如有更复杂的3行表头、4行表头复杂需求可以自行实现。
二、实现思路
1. 借助POI包实现表头的写入。每个表头其实就是一行,如果是多个表头,无非就是将写多行表头,然后将需要合并的表头进行合并,借助POI的函数为addMergedRegion。
2. 将导出数据进行转化为一个集合,循环写入每行数据。
三、实现代码
3.1 pom引入
1.8
3.17
1.3.2
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-validation
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.version}
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.apache.poi
poi-ooxml
${poi.version}
org.apache.poi
poi
${poi.version}
View Code
3.2 Java代码实现
@Getter
@Setter
public class ExcelHelper {
/**
* 表格标题
*/
private String title;
/**
* 单元格宽度
*/
private int colWidth = 20;
/**
* 行高度
*/
private int rowHeight = 20;
private HSSFWorkbook workbook;
/**
* 表头样式
*/
private HSSFCellStyle headStyle;
/**
* 主体样式
*/
private HSSFCellStyle bodyStyle;
/**
* 日期格式化,默认yyyy-MM-dd HH:mm:ss
*/
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* Constructor
* @param title
*/
public ExcelHelper(String title){
this.title = title;
workbook = new HSSFWorkbook();
init();
}
/**
* Constructor
* @param title
* @param colWidth
* @param rowHeight
*/
public ExcelHelper(String title, int colWidth, int rowHeight){
this.colWidth = colWidth;
this.rowHeight = rowHeight;
this.title = title;
workbook = new HSSFWorkbook();
init();
}
/**
* Constructor
* @param title
* @param colWidth
* @param rowHeight
* @param dateFormat
*/
public ExcelHelper(String title, int colWidth, int rowHeight, String dateFormat) {
this.title = title;
this.colWidth = colWidth;
this.rowHeight = rowHeight;
workbook = new HSSFWorkbook();
sdf = new SimpleDateFormat(dateFormat);