EasyExcel 封装使用总结

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

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
    31 引用 • 28 回帖
  • easyexcel
    1 引用
  • POI
    23 引用 • 21 回帖
  • Java

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

    3194 引用 • 8214 回帖

相关帖子

欢迎来到这里!

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

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