Easyexcel生成excel并通过自定义注解实现下拉框以及动态下拉框(将数据库中的数据显示在excel下拉框中)

该博客介绍了如何使用EasyExcel库在Java中创建带有下拉框的Excel表格。通过自定义注解、解析类和处理器,实现了动态下拉框的数据填充,可以从数据库查询数据或者设置静态选项。同时提供了导出到本地文件和前端下载的实现代码,以及解决特定错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要定义excel实体类


@Data
@ColumnWidth(22)
@HeadRowHeight(30)
public class ExcelProductDTO {


    //动态下拉框,可以查询数据库数据显示在下拉框中
    @ExcelSelected(sourceClass = MyExcelSelected.class)
    @ExcelProperty(value = "生产厂家编号")
    private String producerCode;

    @ExcelSelected(source = {"高值","低值"})
    @ExcelProperty(value = "库存价值类型")
    private String stockValType;

    @ExcelSelected(source = {"耗材","普通设备","医疗设备"})
    @ExcelProperty(value = "库存类型")
    private String stockType;

 
    @ExcelSelected(source = {"有","无"})
    @ExcelProperty(value = "是否有明细")
    private Integer hasDetail;

    @ExcelSelected(source = {"药械","资产","设备"})
    @ExcelProperty(value = "业务类型")
    private String ywType;

   
    @ExcelSelected(source = {"虚库","实库"})
    @ExcelProperty(value = "是否虚库")
    private String isVirtual;

    @ExcelSelected(source = {"是","否"})
    @ExcelProperty(value = "是否进口")
    private String isImport;
}

自定义注解

@Documented
@Target({ElementType.FIELD})//用此注解用在属性上。
@Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
public @interface ExcelSelected {
    /**
     * 固定下拉内容
     */
    String[] source() default {};

    /**
     * 动态下拉内容
     */
    Class<? extends ExcelDynamicSelect>[] sourceClass() default {};

    /**
     * 设置下拉框的起始行,默认为第二行
     */
    int firstRow() default 1;

    /**
     * 设置下拉框的结束行,默认为最后一行
     */
    int lastRow() default 0x10000;
}

 创建动态下拉框的接口,设置动态下拉框都实现该接口

public interface ExcelDynamicSelect {
    /**
     * 获取动态生成的下拉框可选数据
     * @return 动态生成的下拉框可选数据
     */
    String[] getSource();
}

自定义注解解析类  (反射)

//自定义注解解析
@Data
@Slf4j
public class ExcelSelectedResolve {
    /**
     * 下拉内容
     */
    private String[] source;

    /**
     * 设置下拉框的起始行,默认为第二行
     */
    private int firstRow;

    /**
     * 设置下拉框的结束行,默认为最后一行
     */
    private int lastRow;

    public String[] resolveSelectedSource(ExcelSelected excelSelected) {
        if (excelSelected == null) {
            return null;
        }

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

        // 获取动态下拉框的内容
        Class<? extends ExcelDynamicSelect&g
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值