SpringBoot如何使用EasyExcel实现表格导出(简洁快速入门版本)

前言

前面给大家介绍了动态表头的导入,这篇文章给大家介绍如何实现导出

前面给大家介绍了动态表头的导入,我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次,我们将目光转向数据导出------即如何将数据以Excel文件的形式输出给用户。这在很多应用场景中都非常有用,比如报表生成、数据备份和迁移等。下面我将详细讲解如何在Spring Boot应用中使用EasyExcel来实现数据的导出功能。

首先先上EasyExcel的官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网

1. 添加依赖

首先,我们需要确保项目中已经包含了EasyExcel的依赖。如果你还没有添加,请打开pom.xml文件,并加入以下Maven依赖:

XML 复制代码
<dependency>
    <groupId>com.alibaba.easyexcel</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.3</version>
</dependency>

请根据你的项目需求选择合适的版本号,通常建议使用最新稳定版。

2.实现

controller层

在Controller层中,我们定义了一个处理导出请求的API端点。该方法接收一个HTTP POST请求,并根据传入的参数(DataFromVo)调用服务层的方法来执行具体的导出逻辑。

java 复制代码
/**
 * 导出检查计划数据
 * @author zqx
 * @date 2023/12/6 17:48
 */
@RestController
@RequestMapping("/inspection")
public class InspectionPlanController {

    @Autowired
    private SiteInspectPlanHomeService siteInspectPlanHomeService;

    /**
     * 导出检查计划信息为Excel文件。
     *
     * @param request  HTTP请求对象,用于获取请求信息。
     * @param response HTTP响应对象,用于设置响应头和写出文件流。
     * @param dataFromVo 包含查询条件的数据传输对象。
     */
    @PostMapping("/exportInspectionPlan")
    @ApiOperation(value = "导出检查计划信息", notes = "将检查计划信息导出为Excel文件")
    public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, @RequestBody DataFromVo dataFromVo) {
        log.info("执行了POST请求");
        log.info("参数:{}", dataFromVo);
        siteInspectPlanHomeService.exportInspectionPlan(request, response, dataFromVo);
    }
}

创建实体类

为了使EasyExcel能够正确地映射Java对象到Excel表格中的列,我们需要创建一个与Excel结构相匹配的实体类。这里我们使用ExportPlanInformationVo作为示例。

java 复制代码
/**
 * 导出信息对象
 * @Author zqx
 * @Date 2023/12/6 9:26
 */
@Data
@HeadRowHeight(30) // 设置头部行高
@ContentRowHeight(25) // 设置内容行高
@ColumnWidth(20) // 设置列宽
@HeadFontStyle(fontName = "宋体", fontHeightInPoints = 11)
public class ExportPlanInformationVo implements Serializable {

    @ApiModelProperty("名称")
    @ExcelProperty("名称")
    private String planName;

    @ApiModelProperty("类型")
    @Dict(code = "inspectionType", fieldName = "inspectionTypeName")
    @ExcelProperty("类型")
    private String inspectionType;

    @ApiModelProperty("主题名称")
    @ExcelProperty("主题")
    private String themeName;

    @ApiModelProperty("计划起止时间")
    @ExcelProperty("计划起止时间")
    private String startEndTime;

    @ApiModelProperty("年度")
    @ExcelProperty("年度")
    private String inspectionYear;

    @ApiModelProperty("单位数量")
    @ExcelProperty("单位数量")
    private String orgNoCount;

    @ApiModelProperty("户数")
    @ExcelProperty("户数")
    private String taskNum;

    @ApiModelProperty("已完成户数")
    @ExcelProperty("已完成户数")
    private String completedNumber;

    @ApiModelProperty("完成率")
    @ExcelProperty("完成率")
    private String inspectionCompletionRate;

    @ApiModelProperty("超期状态")
    @ExcelProperty("超期状态")
    private String isItOverdue;

    @ApiModelProperty("状态")
    @Dict(code = "planStatus", fieldName = "planStatusName")
    @ExcelProperty("状态")
    private String planStatus;

    @ApiModelProperty("创建时间")
    @ExcelProperty("创建时间")
    private String createTime;

    @ApiModelProperty("结束日期")
    @ExcelIgnore // 忽略此字段不输出到Excel中
    private String endTime;
}

Service 层

在Service层中,我们将具体实现导出逻辑。这个例子展示了如何准备要导出的数据,并通过EasyExcel库将其写入HTTP响应流中,以便用户可以下载生成的Excel文件。

java 复制代码
@Service
public class SiteInspectPlanHomeService {

    /**
     * 导出检查计划信息为Excel文件。
     *
     * @param request  HTTP请求对象,用于获取请求信息。
     * @param response HTTP响应对象,用于设置响应头和写出文件流。
     * @param dataFromVo 包含查询条件的数据传输对象。
     */
    @Override
    public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, DataFromVo dataFromVo) {
        try {
            // 根据业务需求处理dataFromVo并获取要导出的数据列表
            List<ExportPlanInformationVo> planVos = prepareDataForExport(dataFromVo);

            // 给文件命名
            String fileName = "现场巡视计划报表";

            // 设置响应内容类型为Excel格式,并编码防止中文乱码问题
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("UTF-8");

            // 设置文件名并处理URL编码
            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");

            // 文件下载方式(附件下载还是在当前浏览器打开)
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");

            // 使用EasyExcel进行数据写入操作
            EasyExcel.write(response.getOutputStream(), ExportPlanInformationVo.class)
                    .sheet("现场巡视计划报表") // 指定工作表名称
                    .doWrite(planVos); // 写入数据到Excel文件

        } catch (Exception e) {
            log.error("导出过程中出现错误 {}", e);
            throw new RuntimeException("导出失败,请稍后再试!");
        }
    }

    /**
     * 准备要导出的数据。
     *
     * @param dataFromVo 查询条件
     * @return 要导出的数据列表
     */
    private List<ExportPlanInformationVo> prepareDataForExport(DataFromVo dataFromVo) {
        // 这里需要根据你的业务逻辑去查询数据库或其它数据源,并转换成ExportPlanInformationVo列表
        // 示例代码:
        List<ExportPlanInformationVo> planVos = new ArrayList<>();
        // 填充数据...
        return planVos;
    }
}

最后

上述代码段详细描述了如何在Spring Boot应用程序中集成EasyExcel以实现检查计划信息的导出功能。每个部分都包含了必要的注释和说明,确保开发者能够理解每一行代码的作用以及整个流程的工作原理。此外,还特别注意了对异常情况的处理,保证即使发生错误也能够给出适当的反馈信息。

相关推荐
ZVAyIVqt0UFji26 分钟前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
谢家小布柔28 分钟前
Git图形界面以及idea中集合Git使用
java·git
loop lee28 分钟前
Nginx - 负载均衡及其配置(Balance)
java·开发语言·github
smileSunshineMan30 分钟前
vertx idea快速使用
java·ide·intellij-idea·vertx
阿乾之铭30 分钟前
IntelliJ IDEA中的语言级别版本与目标字节码版本配置
java·ide·intellij-idea
SomeB1oody1 小时前
【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
开发语言·后端·rust
toto4121 小时前
线程安全与线程不安全
java·开发语言·安全
筏镜1 小时前
调整docker bridge地址冲突,通过bip调整 bridge地址
java·docker·eureka
winner88812 小时前
git merge 冲突 解决 show case
java·git·git merge·git冲突
AI人H哥会Java3 小时前
【Spring】Spring的模块架构与生态圈—Spring MVC与Spring WebFlux
java·开发语言·后端·spring·架构