废话不多说,直奔主题,本次是需要在一个包含2个sheet的excel模板中填充数据
easyexcel版本号为 2.2.10
springboot版本号 2.3.8.RELEASE
模板文件需要放在项目中resources中
模板第一个sheet
模板第二个sheet
主要代码:
// 为第一个sheet封装枚举参数值对象
checkModelStatusVo.setA("85%");
checkModelStatusVo.setB("15%");
checkModelStatusVo.setC("65%");
checkModelStatusVo.setD("35%");
checkModelStatusVo.setE("100%");
checkModelStatusVo.setF("0%");
// 复制模板文件到临时目录中,用完需要删除
File tempFile = ResourseUtil.copyFileFromTemplate("model.xlsx");
InputStream templateInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("model.xlsx");
ExcelWriter excelWriter = EasyExcel.write(tempFile, Model1Vo.class)
.withTemplate(templateInputStream)
.registerWriteHandler(new AutoCheckCellWriteHandler())
.build();
WriteSheet sheet0 = EasyExcel.writerSheet(0).build();
// 填充第一个sheet中的枚举参数
excelWriter.fill(checkModelStatusVo,sheet0);
// 填充第二个sheet中的列表
WriteSheet writeSheet1 = EasyExcel.writerSheet(1).head(Model2Vo.class).build();
excelWriter.write(resultList, writeSheet1);
// 最后别忘记finish,将内存中的数据写入到excel中
excelWriter.finish();
这里Model2Vo.class 对对于导入excel的集合数据,easyexcel要求在对象属性上添加相对应的注解
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TeacherNoSettingExportVo implements Serializable {
@ExcelProperty("序号")
@ColumnWidth(10)
private Integer serialNum;
@ExcelProperty("产品类型")
@ColumnWidth(25)
private String productType;
@ExcelProperty("产品名称")
@ColumnWidth(25)
private String productName;
@ExcelProperty("来源")
@ColumnWidth(25)
private String originFrom;
@ExcelProperty("联系方式")
@ColumnWidth(20)
private String phone;
}
.registerWriteHandler(new AutoCheckCellWriteHandler()) 这里使用了一个自定义的拦截器,是为了根据填充的数据值的不同,设置不一样的单元格样式,例如第一个sheet中完成状态小于100%时,字体颜色需要显示红色。
public class AutoCheckCellWriteHandler extends AbstractCellWriteHandler {
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
int columnIndex = cell.getColumnIndex();
int rowIndex = cell.getRowIndex();
if (writeSheetHolder.getSheetNo() == 0 && rowIndex >= 1) {
if(columnIndex == 3){
String stringCellValue = cell.getStringCellValue();
if (StringUtils.isNotBlank(stringCellValue)) {
stringCellValue = stringCellValue.replace("%", "");
int finishSchedule = Integer.parseInt(stringCellValue);
if (finishSchedule < 100) {
Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
CellStyle cellStyle = workbook.createCellStyle();
//设置单元格边框类型
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
//水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//字体设置为红色
Font font = workbook.createFont();
font.setColor(IndexedColors.RED.index);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
}
}
}
}
}
}
至此,整理结束,有不对之处欢迎指正。