引入EasyPoi的依赖包
我使用的版本是4.1.0
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.1.0</version>
</dependency>
实现代码
// 定义包含多个sheet的列表
List<Map<String, Object>> sheetsList = new ArrayList<>();
// 定义第一个sheet的数据和格式
HashMap<String, Object> oneSheet = Maps.newHashMap();
ExportParams exportParams1 = new ExportParams("正向", "正向");
exportParams1.setStyle(ExcelStyleHandler.class);
exportParams1.setType(ExcelType.XSSF);
oneSheet.put("title", exportParams1);
oneSheet.put("entity", SendRebateExcelEntity.class);
oneSheet.put("data", sendRebateExcelEntities);
sheetsList.add(oneSheet);
// 定义第二个sheet的数据和格式
HashMap<String, Object> twoSheet = Maps.newHashMap();
ExportParams exportParams2 = new ExportParams("退款", "退款");
exportParams2.setStyle(ExcelStyleHandler.class);
exportParams2.setType(ExcelType.XSSF);
twoSheet.put("title", exportParams2);
twoSheet.put("entity", OrderRefundExcelEntity.class);
twoSheet.put("data", orderRefundExcelEntities);
sheetsList.add(twoSheet);
// 定义第三个sheet的数据和格式
HashMap<String, Object> threeSheet = Maps.newHashMap();
ExportParams exportParams3 = new ExportParams("以门店维度-计算应冲返利", "以门店维度-计算应冲返利");
exportParams3.setStyle(ExcelStyleHandler.class);
exportParams3.setType(ExcelType.XSSF);
threeSheet.put("title", exportParams3);
threeSheet.put("entity", StoreSendRebateExcelEntity.class);
threeSheet.put("data", sumList);
sheetsList.add(threeSheet);
Workbook workbook = ExcelExportUtil.exportExcel(sheetsList,ExcelType.XSSF);
WorkbookUtil.writeBook(workbook, new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\门店扫码入库匹配返利统计.xlsx")));
Excel导出模板类
导出模板类,都以下面的方式配置即可
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author lwh
* @date 2024/4/25
* @description 以门店为主,应冲返利 - 退款返利
**/
@Data
public class StoreSendRebateExcelEntity {
@Excel(name = "门店ID", needMerge = true, width = 20D, type = 10)
private Long storeId;
@Excel(name = "应冲返利 - 退款返利", needMerge = true, width = 20D, type = 10)
private BigDecimal sendRebate;
}
样式类
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
import org.apache.poi.ss.usermodel.*;
/**
* @author lwh
* @date 2024/4/25
* @description 导出样式
**/
public class ExcelStyleHandler implements IExcelExportStyler {
private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
private static final short FONT_SIZE_TEN = 10;
private static final short FONT_SIZE_ELEVEN = 11;
private static final short FONT_SIZE_TWELVE = 12;
/**
* 大标题样式
*/
private CellStyle headerStyle;
/**
* 每列标题样式
*/
private CellStyle titleStyle;
/**
* 数据行样式
*/
private CellStyle styles;
public ExcelStyleHandler(Workbook workbook) {
this.init(workbook);
}
/**
* 初始化样式
*
* @param workbook
*/
private void init(Workbook workbook) {
this.headerStyle = initHeaderStyle(workbook);
this.titleStyle = initTitleStyle(workbook);
this.styles = initStyles(workbook);
}
/**
* 大标题样式
*
* @param color
* @return
*/
@Override
public CellStyle getHeaderStyle(short color) {
return headerStyle;
}
/**
* 每列标题样式
*
* @param color
* @return
*/
@Override
public CellStyle getTitleStyle(short color) {
return titleStyle;
}
/**
* 数据行样式
*
* @param parity 可以用来表示奇偶行
* @param entity 数据内容
* @return 样式
*/
@Override
public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
return styles;
}
/**
* 获取样式方法
*
* @param dataRow 数据行
* @param obj 对象
* @param data 数据
*/
@Override
public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
return getStyles(true, entity);
}
/**
* 模板使用的样式设置
*/
@Override
public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
return null;
}
/**
* 初始化--大标题样式
*
* @param workbook
* @return
*/
private CellStyle initHeaderStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true));
return style;
}
/**
* 初始化--每列标题样式
*
* @param workbook
* @return
*/
private CellStyle initTitleStyle(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false));
//背景色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
return style;
}
/**
* 初始化--数据行样式
*
* @param workbook
* @return
*/
private CellStyle initStyles(Workbook workbook) {
CellStyle style = getBaseCellStyle(workbook);
style.setFont(getFont(workbook, FONT_SIZE_TEN, false));
style.setDataFormat(STRING_FORMAT);
return style;
}
/**
* 基础样式
*
* @return
*/
private CellStyle getBaseCellStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();
//下边框
style.setBorderBottom(BorderStyle.THIN);
//左边框
style.setBorderLeft(BorderStyle.THIN);
//上边框
style.setBorderTop(BorderStyle.THIN);
//右边框
style.setBorderRight(BorderStyle.THIN);
//水平居中
style.setAlignment(HorizontalAlignment.CENTER);
//上下居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
//设置自动换行
style.setWrapText(true);
return style;
}
/**
* 字体样式
*
* @param size 字体大小
* @param isBold 是否加粗
* @return
*/
private Font getFont(Workbook workbook, short size, boolean isBold) {
Font font = workbook.createFont();
//是否加粗
font.setBold(isBold);
//字体大小
font.setFontHeightInPoints(size);
return font;
}
}