java 导出excel

一、动态下拉框

在这里插入图片描述如何得到这样一张表格?在单元格中插入可选下拉框。
思路分析:
① excel 表头每个字段对应实体的每个字段
② 表头字段是从注解 @ExcelProperty的value中取得的(参考alibaba的写excel方法)
③那么,是否可以自定义1个注解,通过这个注解得到下拉框的值

使用的工具类:easyexcel

第一步,自定义一个注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.FIELD})
public @interface ExplicitConstraint {
   

    //定义注解类型元素(基本数据类型,String,Class,枚举,注解,数组)
    Class<? extends EasyExcelSelect> sourceClass();

    String value() default "";

}

第二步,定义一个抽象类

public abstract class EasyExcelSelect {
   

    /**
     * 得到下拉框的值
     *
     * @return
     */
    public abstract String[] selectValue(Object value);
}

第三步,定义一个实现类

public class DictEasySelect extends EasyExcelSelect {
   
    @Override
    public String[] selectValue(Object value) {
   
        if(ObjectUtils.allNotNull(value)){
   
            //用BeanFactory来获取bean
            RemoteDataDictService remoteDataDictService = SpringUtils.getBean(RemoteDataDictService.class);
            //查出字典中该字段的所有可能值
            List<DictTreeVo> list = remoteDataDictService.findDictList(value.toString());
            if(StringUtils.isNotEmpty(list)){
   
                return list.stream().map(DictTreeVo::getDictName).toArray(String[]::new);
            }
        }
        return null;
    }

}

第四步,new一个实体,并在需要下拉的字段上引用该注解

@ApiModel("试题批量导入模板")
@ColumnWidth(value = 10)
@HeadRowHeight(5)
@ContentRowHeight(5)
@HeadFontStyle(fontHeightInPoints = 12)
public class TopicTemplateDto {
   

    
    @ApiModelProperty(value = "试题类型", required = true)
    @ExcelProperty(value = "试题类型",index = 3)
    @ExplicitConstraint(sourceClass = DictEasySelect.class,value = Constants.SUBJECT_TYPE)
    private Integer topicType;

}

第五步,实现excel导出功能

/**
     * 导出动态下拉框
     */
    public static ExportVo writeExcel(String fileName, Class clazz) {
   
        ByteArrayOutputStream 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值