Hutool官方使用文档:

https://hutool.cn/docs/#/http://hutool官方使用文档

一、pom依赖

    <!--     hutool Java工具包类库  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.41</version>
        </dependency>

二、上代码

控制层controller

  /**
     * 下载导入模版
     *
     * @param response
     * @throws IOException
     */
    @GetMapping("/downloadTemplate")
    public void downloadTemplate(HttpServletResponse response) throws IOException {
        自己的Service.downloadTemplate(response);
    }

服务层service

  /**
     * 下载导入模版
     *
     * @param response
     * @throws IOException
     */
    void downloadTemplate(HttpServletResponse response) throws IOException;

服务实现层serviceImpl

   /**
     * 下载导入模版
     *
     * @param response
     * @throws IOException
     */
    @Override
    public void downloadTemplate(HttpServletResponse response) throws IOException {
        //自己的业务逻辑获取数据库的下拉或者自定义数据下拉【以下仅供参考】

        // 标题下拉:获取数据库数据,作为数据
        String[] titleList =自己的mapper.getSelfDataList();

        // 是否必填下拉: 自定义数据,作为下拉数据
        String[] requiredList = {"是", "否"};

        
        
        
        // 设置响应头
        String fileName = "template.xlsx";
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

        // 创建Excel写入器
        ExcelWriter writer = ExcelUtil.getWriter();

        // 设置列宽,下标从0开始,20宽度
        for (int i = 0; i < 6; i++) {
            writer.setColumnWidth(i, 20);
        }

        // 写入表头
        writer.writeHeadRow(Arrays.asList("标题", "是否必填","列名3" ));

        // 使用Hutool的数据验证工具
        DataValidationHelper dvHelper = writer.getSheet().getDataValidationHelper();

        // 第一个下拉:标题下拉数据列表
        DataValidationConstraint constraint1 = dvHelper.createExplicitListConstraint(titleList);
        CellRangeAddressList cellRange1 = new CellRangeAddressList(1, 10000, 0, 0);
        DataValidation dataValidation1 = dvHelper.createValidation(constraint1, cellRange1);
        // 显示下拉箭头
        dataValidation1.setSuppressDropDownArrow(false);
        // 显示提示框
        dataValidation1.setShowPromptBox(true);
        // 设置为INFO级别允许输入
        dataValidation1.setErrorStyle(DataValidation.ErrorStyle.INFO);
        // 创建提示框
        dataValidation1.createPromptBox("提示", "请选择或输入标题");
        // 不显示错误提示框
        dataValidation1.setShowErrorBox(false);
        writer.getSheet().addValidationData(dataValidation1);


        // 修正:是否必填下拉
        DataValidationConstraint constraint2 = dvHelper.createExplicitListConstraint(requiredList);
        CellRangeAddressList cellRange2 = new CellRangeAddressList(1, 10000, 1, 1);
        DataValidation dataValidation2 = dvHelper.createValidation(constraint2, cellRange2);
        // 显示下拉箭头
        dataValidation2.setSuppressDropDownArrow(false);
        // 显示提示框
        dataValidation2.setShowPromptBox(true);
        dataValidation2.createPromptBox("提示", "请选择必填选项");
        dataValidation2.createErrorBox("错误", "请输入有效的必填选项");
        // 显示错误提示框
        dataValidation2.setShowErrorBox(true);
        // 设置为INFO级别允许输入
        dataValidation2.setErrorStyle(DataValidation.ErrorStyle.INFO);
        writer.getSheet().addValidationData(dataValidation2);

        writer.flush(response.getOutputStream());
        writer.close();
    }

三、测试下载

整列都会有这个提示

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐