Excel表格下载模板(带下拉框选项)

下载excel模板需要带下拉框选项,现在纯JAVA代码来实现
1.模板标题实体类

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ExcelQuestions implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 类型
     */
    @Excel(name = "类型",width = 30)
    private Integer type;

    /**
     * 任务
     */
    @Excel(name = "任务", width = 30)
    private String taskName;

    /**
     * 类型1
     */
    @Excel(name = "类型1", width = 30)
    private String taskTarget;

    /**
     * 类型2
     */
    @Excel(name = "类型2", width = 30)
    private Integer dutyUnit;
}

2.代码实现如下

public R download(HttpServletResponse response) {
        ExportParams exportParams = new ExportParams();
        exportParams.setSheetName("测试模板");
        response.setContentType("application/x-download;charset=UTF-8");
        response.addHeader("Content-disposition", "filename=demo.xls");
        List<ExcelQuestions> list = new ArrayList<>();
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ExcelQuestions.class, list);
		//可以通过数据库获取下拉框的内容
         List<String> typeList=...;
         //list集合转成数组
        String[] array2 = typeList.toArray(new String[typeList.size()]);
        //设置下拉框的位置 0:第一列列号 0:最后一列列号
        selectList(workbook, 0, 0, array2 );
        OutputStream fos = null;
        try {
            fos = response.getOutputStream();
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return R.ok();
    }

/**
     * firstRow 開始行號 根据此项目,默认为2(下标0开始)
     * lastRow  根据此项目,默认为最大65535
     * firstCol 区域中第一个单元格的列号 (下标0开始)
     * lastCol 区域中最后一个单元格的列号
     * strings 下拉内容
     * */
    public static void selectList(Workbook workbook, int firstCol, int lastCol, String[] strings ){
        Sheet sheet = workbook.getSheetAt(0);
        //  生成下拉列表
        //  只对(x,x)单元格有效
        CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(1, 65535, firstCol, lastCol);
        //  生成下拉框内容
        DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(strings);
        HSSFDataValidation dataValidation = new HSSFDataValidation(cellRangeAddressList, dvConstraint);
        //  对sheet页生效
        sheet.addValidationData(dataValidation);
    }

导出模板如下
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微笑再加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值