java导出动态下拉框excel模板

1.原始模板

2.导出模板,下拉框为数据库中得到动态数据

java 复制代码
public void downloadTemplate(HttpServletResponse response) throws IOException {
        // 所有部门
        List<String, String> departments = expertManageMapper.selectAllDepartment();
        //所有职位
        List<String, String> posts = expertManageMapper.selectAllPost();
        //所有级别
        List<String, String> levels = expertManageMapper.selectAllLevel();

        // 创建或读取已有的Excel模板
        InputStream templateFileStream = new ClassPathResource("/templates/excel/expert_template.xlsx").getInputStream();
        Workbook workbook = new XSSFWorkbook(templateFileStream);
        Sheet sheet = workbook.getSheetAt(0);
        DataValidationHelper validationHelper = sheet.getDataValidationHelper();
        // 工作表的第二行索引
        int firstRowNum = 1;
        // 工作表的最后一行索引
        int lastRowNum = 10000;
        //添加需要校验的单元格,startCol和endCol根据模板中列进行修改
        // 科室校验
        applyDataValidation(validationHelper, sheet, addressList(firstRowNum, lastRowNum, 3, 3), ArrayUtils.toArray(departments));
        // 职位校验
        applyDataValidation(validationHelper, sheet, addressList(firstRowNum, lastRowNum, 4, 4),ArrayUtils.toArray(posts));
        // 等级校验
        applyDataValidation(validationHelper, sheet, addressList(firstRowNum, lastRowNum, 5, 5), ArrayUtils.toArray(levels));
        // 设置响应头信息
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        String encodedFilename = UriUtils.encode("专家信息录入模板.xlsx", StandardCharsets.UTF_8);
        response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + encodedFilename);
        try (ServletOutputStream outputStream = response.getOutputStream()) {
            // 将修改后的Excel内容写入到输出流
            workbook.write(outputStream);
        } finally {
            workbook.close();
        }

    }

  /**
     * 简化创建和应用数据验证的过程
     */
    private void applyDataValidation(DataValidationHelper validationHelper, Sheet sheet, CellRangeAddressList addressList, String[] validationData) {
        if (validationData.length > 0) {
            DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(validationData);
            DataValidation validation = validationHelper.createValidation(constraint, addressList);
            sheet.addValidationData(validation);
        }

    }


    /**
     * 创建CellRangeAddressList
     */
    private CellRangeAddressList addressList(int startRow, int endRow, int startCol, int endCol) {
        return new CellRangeAddressList(startRow, endRow, startCol, endCol);
    }
相关推荐
重生之后端学习2 分钟前
19. 删除链表的倒数第 N 个结点
java·数据结构·算法·leetcode·职场和发展
qq_12498707533 分钟前
基于小程序中医食谱推荐系统的设计(源码+论文+部署+安装)
java·spring boot·后端·微信小程序·小程序·毕业设计·计算机毕业设计
Coder_Boy_7 分钟前
基于SpringAI的在线考试系统-阅卷评分模块时序图
java·人工智能·spring boot
linweidong26 分钟前
C++大型系统中如何组织头文件和依赖树?
java·c++·架构
橘子师兄31 分钟前
C++AI大模型接入SDK—环境搭建
开发语言·c++·人工智能
lkbhua莱克瓦2431 分钟前
JavaScript核心语法
开发语言·前端·javascript·笔记·html·ecmascript·javaweb
bubiyoushang88832 分钟前
基于MATLAB的近红外光谱与PLS方法测定药片有效成分含量的实现
开发语言·matlab
鹿角片ljp33 分钟前
力扣14.最长公共前缀-纵向扫描法
java·算法·leetcode
weixin_4331793334 分钟前
Hangman 猜字游戏使用列表List实现
开发语言·python
pengweizhong36 分钟前
Dynamic‑SQL2 查询篇:MyBatis 增强利器,让 SQL 像写 Java 一样丝滑
java·sql·教程