Java教程:如何使用EasyExcel导出模板文件并自定义下拉数据选项供用户选择

关注微信公众号(首席摸鱼师)免费查看全部文章

前言:

在SpringBoot项目中经常会使用EasyExcel做导入导出功能,有时会有这样的一个需求,就是在生成导入模板时,能自动的将一些选项值,字典值,状态值等带出来让用户自己去选择,可以避免填错其他值或者不知道填什么的一些问题,对用户来说是比较友好的
Java教程:如何使用EasyExcel导出模板文件并自定义下拉数据选项供用户选择_第1张图片
EasyExcel中提供了一个处理器接口:SheetWriteHandler,用于在导出Excel时处理sheet的创建和写入操作‌。它继承自WriteHandler接口,主要作用是在创建sheet前后执行特定的逻辑。可以利用SheetWriteHandler创建一个自定义的SheetWriteHandler并注册到EasyExcel中来实现这一目的,但每次不同的业务功能都需要定义却显得非常麻烦,本着省力少做多摸鱼的原则,我们可以将它封装成注解,下来主要说一下详细步骤。

一、 导入EasyExcel依赖

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>easyexcelartifactId>
    <version>3.3.1 version>
dependency>
版本根据自己需要修改

二、创建一个下拉注解

import java.lang.annotation.*;

/**
 * 定义Excel列下拉列表属性的注解
 *  * @author [email protected]
 */
@Documented
@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelSelected {
   
    /**
     * 方式一:固定的下拉选项
     */
    String[] source() default {
   };

    /**
     * 方式二:提供动态下拉选项的类
     */
    Class<? extends ExcelDynamicSelect>[] sourceClass() default {
   };

    /**
     * 下拉列表的起始行(默认从第二行开始)。
     */
    int firstRow() default 1;

    /**
     * 下拉列表的结束行(默认到第65536行)。
     */
    int lastRow() default 65536;
}
其中有4个属性,分别代表如下:
 * source:适合少量数据,固定写好的值
 * sourceClass:自定义数据源,适合复杂数据来源,可以从数据库查询进行组装
 * firstRow:生效下拉的起始行,可修改
 * lastRow:生效下拉的结束行,可修改

三、 创建一个ExcelSelectedResolve类,用来解析下拉列表数据来源

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * 根据 ExcelSelected 注解解析下拉列表数据源。
 *
 * @author [email protected]
 */
@Data
@Slf4j
public class ExcelSelectedResolve {
   
    /**
     * 下拉选项数组。
     */
    private String[] source;

    /**
     * 下拉列表的起始行。
     */
    private int firstRow;

    /**
     * 下拉列表的结束行。
     */
    private int lastRow;

    /**
     * 解析下拉列表数据来源
     *
     * @param excelSelected 下拉框注解对象
     * @return 下拉框选项数组
     */
    public String[] resolveSelectedSource(ExcelSelected excelSelected) {
   
        if (excelSelected == null) {
   
            return null;
        }

        // 方式一:获取固定下拉框的内容
        String[] source = excelSelected.source();
        if (source.length > 0) {
   
            return source;
        }

        // 方式二:获取动态下拉框的内容
        Class<? extends ExcelDynamicSelect>[] classes = excelSelected.sourceClass();
        if (classes.length > 0) {
   
            try {
   
                ExcelDynamicSelect excelDynamicSelect = classes[0]

你可能感兴趣的:(java,spring,boot,开发语言)