EasyExcel 封装使用总结

本贴最后更新于 1433 天前,其中的信息可能已经沧海桑田

EasyExcel 简单介绍

  • AnalysisEventListener EasyExcel 提供的抽象类 继承该类可以灵活操作 读取的 excel 数据
  • AbstractRowWriteHandler EastExcel 提供的抽象类,继承此类可以灵活设置 excel 样式,使用原生 poi 接口,正常使用无需关注
  • EasyExcelListener 是我抽象出来的 平时如果没有对导入的 excel 数据灵活操作的都可以使用该类,正常使用无需关注

注解介绍


//-----------------------常用注解介绍------------------------------------//
@ExcelProperty //使用最多的 定义字段 目前如果不标准字段注解 EasyExcel是会自动处理的 不会忽略
@ExcelIgnore //忽略无用字段
@ExcelIgnoreUnannotated //忽略所有未添加ExcelProperty注解的字段
//-----------------------格式化注解介绍------------------------------------//
@DateTimeFormat //时间格式化
@NumberFormat //数字格式化
//-----------------------样式注解---------------------------------------//
@ColumnWidth //表格宽度
@ContentFontStyle //表格的内容字体设置
@ContentLoopMerge //表格区域合并
@ContentRowHeight//设置表格的高度
@ContentStyle //区域样式
@HeadFontStyle //表格的头字体设置
@HeadRowHeight /表格的头高度设置
@HeadStyle //字符串的头背景设置
@OnceAbsoluteMerge //合并单元格一次

简单使用

上传


  /**
     * 文件上传
     */
    @PostMapping("/upload")
    @ResponseBody
    public List<TestEasyData> upload(MultipartFile file) throws IOException {
        //读取数据行
        List<TestEasyData> testEasyData = EasyExcelUtil.readExcel(file.getInputStream(), TestEasyData.class);
        return testEasyData;
    }

下载


 /**
     * 文件下载
     */
    @GetMapping("/download")
    public void download(HttpServletResponse response) throws IOException {
        List<TestEasyData> data = data();
        // 请直接用浏览器或者用postman
        EasyExcelUtil.writeExcel(response,"测试工具类",data,TestEasyData.class,"第一个表格");
    }

工具类封装


public class EasyExcelUtil {

    /**
     * 读取第一个 sheet 的 Excel
     *
     * @param stream    文件
     * @param tClass 实体类映射,
     * @return Excel 数据 list
     */
    public  static <T>  List<T> readExcel(InputStream stream, Class<T> tClass) {
       return readExcel(stream,tClass,1);
    }

    /**
     * 读取某个 sheet 的 Excel
     *
     * @param stream    文件
     * @param tClass  实体类映射
     * @param sheetNo sheet 的序号 从1开始 /sheetNO 为空则读取第一个sheetNO
     * @return Excel 数据 list
     */
    public  static <T>  List<T> readExcel(InputStream stream, Class<T> tClass,Integer sheetNo) {
        if (Objects.isNull(sheetNo)||sheetNo==0){
            sheetNo=1;
        }
        EasyExcelListener<T> listener=new EasyExcelListener<T>();
        //easyExcel sheetNo从零开始
        EasyExcel.read(stream, tClass, listener).sheet(sheetNo-1).doRead();
        return listener.getDatas();
    }

    /**
     * 导出 Excel :一个 sheet,带表头
     *
     * @param outputStream  OutputStream
     * @param list      数据 list,
     * @param clazz   导出结构体
     * @param sheetName 导入文件的 sheet 名
     */
    public static <T> void writeExcel(OutputStream outputStream,List<T> list,Class clazz,String sheetName) {
        EasyExcel.write(outputStream,clazz).sheet(sheetName).doWrite(list);
    }

    /**
     * 导出 Excel 直接可以在Spring web Controller 中使用
     *
     * @param response  HttpServletResponse
     * @param fileName  文件名
     * @param list      数据 list,
     * @param clazz   导出结构体
     * @param sheetName 导入文件的 sheet 名
     */
    public static <T> void writeExcel(HttpServletResponse response, String fileName, List<T> list, Class<T> clazz, String sheetName) throws IOException {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileNameEnCode = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "+");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEnCode + ".xlsx");
        writeExcel(response.getOutputStream(),list,clazz,sheetName);
    }
}

使用到的类

java
@Data
// 头背景设置
@HeadStyle(fillPatternType = FillPatternType.NO_FILL, fillForegroundColor = 10)
// 头字体设置成20
@HeadFontStyle(fontHeightInPoints = 12)
@HeadRowHeight(value = 60)
public class TestEasyData {
    @ExcelProperty(value = "编码")
    private String code;
    @ExcelProperty(value = "名字")
    private String name;
    @ExcelProperty(value = "数字")
    private Double number;
}
  • Excel
    30 引用 • 28 回帖
  • easyexcel
    1 引用
  • POI
    23 引用 • 21 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...