esayExcel自定义注解导出带下拉框

这篇博客介绍了如何利用EasyExcel的自定义注解,在Java和Spring环境中创建Excel导出,并实现带下拉框的功能。通过示例代码展示了如何结合Spring上下文工具来操作,内容部分包含注解的使用、处理器的处理以及具体的使用场景。

 

注解

package com.baidu.activitidemo.annotation;

import com.baidu.activitidemo.handler.ExcelSelectedHandler;

import java.lang.annotation.*;

/**
 * 设置列的下拉选择值, 需要配合{@link ExcelSelectedHandler}使用
 *
 * @author li
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelSelected {

    /**
     * 一般使用此属性的值进行下拉值的填充
     *
     * @return {@link String[]}
     */
    String[] value() default {};

    /**
     * 慎用此属性,建议使用value
     * 此处值应为一个SpEL,返回值需要是一个数组或集合
     * 此表达式若有值(无论是否调用是否成功),则会忽略value属性
     * 使用示例:#root.getBean('userService')?.getSelectedList('2')
     * 此处的使用示例中的 #root指的是applicationContext
     *
     * @return {@link String}
     */
    String dynamicAccess() default "";

    /**
     * 下拉起始行
     * -1表示表头的下一行,代码自动获取
     *
     * @return int
     */
    int firstRow() default -1;

    /**
     * 下拉结束行
     * -1表示使用默认值1000
     *
     * @return int
     */
    int lastRow() default -1;
}

Handler

package com.baidu.activitidemo.handler;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import com.baidu.activitidemo.annotation.ExcelSelected;
import com.baidu.activitidemo.config.SpringContextUtil;
import lombok.Data;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * 设置列的下拉选择值, 需要配合注解{@link ExcelSelected}使用
 * eg:EasyExcel.write(fileName, Person.class).registerWriteHandler(new ExcelRemarkHandler(Person.class))
 *
 * @author lxh
 * @date 2022/9/24 8:59
 */
@Data
public class ExcelSelectedHandler<T> implements SheetWriteHandler {
    /** 解析后的下拉数据 */
    private Map<Integer, ExcelSelectedResolve> excelSelectedResolveMap;

    /** spring表达式解析器 */
    private SpelExpressionParser spelExpressionParser;

    /** 标准上下文 */
    private StandardEvaluationContext standardEvaluationContext;

    /** 默认不在新sheet页中设置下拉值 */
    private boolean inNewSheetFlag = false;

    /** 当前最大规格 */
    private Integer currentMaxLength;

    /** 允许最大规格 */
    public Integer allowMaxLength = 200;

    /** 默认下拉的行数:1000 */
    private int defaultRowNumber;

    /** 需要解析的类 */
    private Class<T> clazz;

    /** 字母 */
    private static final char[] alphabet = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W'
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值