EasyExcel

766 阅读1分钟

导入依赖

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>easyexcel</artifactId>
     <version>2.2.6</version>
</dependency>

直接通过EasyExcel调用write方法

EasyExcel.write(fileName, clazz).sheet(sheetName).doWrite(dataList);

分别创建ExcelWriter和WriteSheet对象,写完要手动关闭ExcelWriter的方法关闭流

ExcelWriter excelWriter = EasyExcel.write(fileName, clazz).build();
WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build();
excelWriter.write(dataList, writeSheet);
excelWriter.finish();

不同对象写入不同sheet中

ExcelWriter excelWriter = EasyExcel.write(pathName).build();
//需要添加 head(),否则导出Excel没有表头
WriteSheet firstWriteSheet = EasyExcel.writerSheet("gt").head(UserInfo.class).build();
WriteSheet secondWriterSheet = EasyExcel.writerSheet("gt1").build();
excelWriter.write(userInfos, firstWriteSheet);
excelWriter.write(userInfos, secondWriterSheet);
//一定要关闭流,否则数据无法写入Excel表中
excelWriter.finish();

web中Excel文件下载

@GetMapping("download")
public void download(HttpServletResponse response) throws IOException {
    // 重置response
    response.reset();
    // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("utf-8");
    // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
    String fileName = URLEncoder.encode(excelName, "UTF-8");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
   	ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
	WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build();
	excelWriter.write(dataList, writeSheet);
	excelWriter.finish();
}

自定义转换器

//泛型对象为要转换字段的Java数据类型
public class GenderConverter implements Converter<Integer> {
    @Override
    public Class supportJavaTypeKey() {
        return Integer.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
	//读取Excel时调用
    @Override
    public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String stringValue = cellData.getStringValue();
        if ("男".equals(stringValue)){
            return 1;
        }else {
            return 2;
        }
    }
	
    //写入的时候调用
    @Override
    public CellData convertToExcelData(Integer integer, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        if(Objects.equals(integer,1)){
            return new CellData("男");
        }
        return new CellData("");
    }
}