首页 > 其他分享 >springboot整合EasyExcel导出excel表格

springboot整合EasyExcel导出excel表格

时间:2025-01-12 13:33:03浏览次数:3  
标签:return springboot Excel EasyExcel excel 导出 value public

文章目录

什么是 EasyExcel?

  EasyExcel 是阿里巴巴开源的一款高性能、简洁易用的 Excel 读写工具库,基于 Java 开发。与传统的 Apache POI 相比,EasyExcel 专注于简化 Excel 操作,特别是在大规模数据导入导出场景下表现出色。
  GitHub 地址:https://github.com/alibaba/easyexcel

EasyExcel 的特点

  • 高性能: 使用 SAX 方式解析 Excel,内存占用更低,特别适合大数据量的 Excel 文件操作。可处理百万行数据,而不会像 Apache POI 一样造成内存溢出。
  • 操作简单:通过注解(如 @ExcelProperty)快速完成字段与 Excel列的映射。代码量少,API 设计简单易用。
  • 支持多种格式:支持 .xls 和 .xlsx 格式的 Excel 文件。同时支持简单和复杂表头、多级表头的处理。
  • 丰富的功能:支持自定义样式(列宽、字体、颜色等)。支持大数据量的批量写入和读取。提供自定义转换器(如日期格式、数值格式)和监听器机制。

使用EasyExcel导出excel

1.添加EasyExcel依赖

  在 SpringBoot 项目中添加 EasyExcel 依赖,pom.xml中加入:

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

2.定义converter

public class BooleanConverter implements Converter<Boolean> {
    public BooleanConverter() {
    }

    public Class<?> supportJavaTypeKey() {
        return Boolean.class;
    }

    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 从excel读数据时候调用
     * 单元格数据转java数据
     * @param cellData Excel 单元格的数据,<?> 表示通配符,意味着可以接受任何类型的数据
     * @param contentProperty Excel 内容的元数据,例如列标题、格式等
     * @param globalConfiguration 一般是全局配置
     * @return
     */
    public WriteCellData<?> convertToExcelData(Boolean value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
        return new WriteCellData(value ? "是" : "否");
    }

    /**
     * 写数据到excel里面时调用
     * java数据转换Excel单元格数据
     * @param context 上下文对象,可以获取值
     * @return
     */
    @Override
    public Boolean convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
                                        GlobalConfiguration globalConfiguration) {
        String value = cellData.getStringValue();
        if (StringUtils.isBlank(value)){
            // 未知
            return null;
        }
        if (value.indexOf("是") != -1) {
            return Boolean.TRUE;
        }
        if (value.indexOf("否") != -1) {
            return Boolean.FALSE;
        }
        return null;
    }

}

  Converter 的作用是解决 Excel 数据与 Java 字段之间的转换.在这个例子中Excel单元格中的对应于java中的Boolean类型的TrueFalse,因此需要定义一个转换器去相互转换他们,下面会在@ExcelProperty()注解中传入这个转换器.Converter 的使用场景有:

  1. 日期和时间的格式化处理(自定义格式,如 yyyy-MM-dd)。
  2. 枚举值转换(Excel 使用字符串存储,Java 使用枚举类型)。
  3. 数值单位换算(如 “元⇔分”、“MB⇔KB”)。
  4. 复杂字符串解析(如 JSON、CSV 数据格式)。
  5. 多语言动态内容处理(根据语言环境动态生成内容)。
  6. 其他无法通过注解直接实现的复杂映射逻辑

3.定义导出实体类型

public class UserExportModel {
    @ExcelProperty(index = 0,value = "id")
    @ColumnWidth(00)
    private String id;

    @ExcelProperty(index = 1,value = "名称")
    @ColumnWidth(10)
    private String name;
    
    //传入上面定义的转换器
    @ExcelProperty(index = 2,value = "是否成年",converter = BooleanConverter.class)
    @ColumnWidth(10)
    private Boolean isAdult;
    
 	@ExcelIgnore
 	private String remark;
 	
 	@ExcelProperty(index = 3,value = "创建时间")
    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(20)
    private LocalDateTime createTime;


}
  • @ExcelProperty(index = ,value = “”,converter = ) 注解: 在实体类中绑定 Excel列的属性,可以方便地将 Excel 数据和 Java 对象字段进行映射.它的属性(index、value 和 converter等)有以下作用:
      1. index :指定 Excel 列的索引(从 0 开始).
      2. value :指定 Excel 列的名称(表头)以匹配字段.
      3. converter :指定字段的转换器,用于自定义 Excel 数据与 Java 字段之间的转换逻辑.
  • @ExcelIgnore注解: 在 Excel 数据导入或导出过程中 忽略这个字段
  • @ColumnWidth(20)注解: Excel数据导出过程中设置这个字段的excel单元格宽度
  • @DateTimeFormat(“yyyy-MM-dd HH:mm:ss”)注解: 设置该字段导入导出时的日期格式,用于将 Excel 字符串日期和 Java 日期对象之间的格式映射

4.查询数据库数据并导出

@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {
	private final UserService userService;
	
	@GetMapping(value = "downloadUserList", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
	public void exportUserList(HttpServletResponse response) throws IOException {
		//设置 HTTP 响应头
        response.setContentType("application/x-msdownload");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode("用户列表.xlsx"));
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
        
		//从mysql中查询数据
	    List<UserExportModel> userExportModels = userService.getUserExportModelList();

        // 创建excel对象
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), OrderExportModel.class).build();

        //创建sheet
        WriteSheet writeSheet=EasyExcel.writerSheet("用户列表").head(OrderExportModel.class).build();

		//导出
        excelWriter.write(userExportModels, writeSheet);
        excelWriter.finish();
	}	
}

tips:指定了content-type “application/x-download”的方法不应该有返回值,所以不要给controller层设置返回值,不然会报这个错误:

在这里插入图片描述

5.导出样式

在这里插入图片描述

  老铁觉得有用就点个赞吧

标签:return,springboot,Excel,EasyExcel,excel,导出,value,public
From: https://blog.csdn.net/qq_53604504/article/details/144935341

相关文章

  • 试题转excel;word转excel;大风车excel(1.1更新)
         最近更新了大风车excel1.1版本主要优化在算法层面:1.0版本试题解析的成功率为95%,现在1.1版本已经优化到解析成功率为99% 一、问题描述一名教师朋友,偶尔会需要整理一些高质量的题目到excel中以往都是手动复制搬运,几百道题几乎需要一个下午的时间关键这些事,......
  • [免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本
    大家好,我是java1234_小锋老师,看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端),分享下哈。项目视频演示【免费】微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)Java毕业设计_哔哩哔哩_bilibili项目介绍随着越来越多的用户借助于移动手机......
  • 基于springboot的老年人体检管理系统
      博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在在的写点程序。......
  • 基于Springboot的图书电子商务系统【附源码】
    基于Springboot的图书电子商务系统效果如下:系统主页面图书信息管理页面图书资讯页面系统登陆页面个人中心页面我的地址页面图书分类管理页面在线客服页面图书信息页面研究背景随着互联网技术的快速发展,尤其是移动互联网的普及,电子商务已成为人们日常生......
  • 【开题报告+论文+源码】基于SpringBoot+Vue的大学生创新创业申报平台系统
    背景与意义在全球创新创业浪潮的推动下,高等教育机构愈发重视培养大学生的创新精神和创业能力,积极构建有利于学生发挥创新能力、实现创业梦想的良好环境。然而,在实际操作中,项目申报流程繁琐、审核效率低下、权限分配不清晰等问题成为了制约大学生创新创业活动发展的重要瓶颈。......
  • springboot“伊牛”养牛场管理平台源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着农业现代化的不断推进,畜牧业作为农业的重要组成部分,其管理模式也逐渐向智能化、信息化方向发展。传统的养牛场管理往往依赖于人工记录和口头传达,......
  • SpringBoot面试题(2025)
    什么是SpringBoot?多年来,随着新功能的增加,spring变得越来越复杂。只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目,我们必须添加构建路径或添加Maven依赖关系,配置应......
  • 0045.基于springboot+vue的客户关系管理系统(crm)+论文
    一、系统说明基于springboot+vue+elementui开发的客户关系管理系统(crm),系统功能齐全,代码简洁易懂,适合小白学编程。二、系统架构     前端:vue|elementui     后端:springboot|mybatis      环境:jdk1.8+|mysql8.0+|maven三、代码及数据库四、......
  • springboot高校社团管理系统-毕业设计源码36784
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2 系统分析2.1可行性分析2.2系统流程分析2.2.1数据新增流程2.2.2数据删除流程2.3 系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4 系统用例分析3系统总体设计3......
  • 基于SpringBoot+Andriod的大学生实践教学管理系统安卓APP的设计与实现
    ......