java实现设置Excel下拉框

在使用Excel的时候用到了下拉框,实现的效果如下↓

java实现设置Excel下拉框

在生成excel文件时,需要根据给出的下拉框选项列表动态生成下拉框。实现代码如下:

private void createSelect(XSSFWorkbook workbook, DataValidationHelper helper, XSSFSheet targetSheet, List selectList, int column, int fromRow, int endRow) {
     // workbook表示当前excel文件,targetSheet表示要加下拉框的sheet,selectList表示下拉框选项列表;column表示下拉框所在的列;fromRow表示下拉框开始行,endRow表示下拉框结束行
    // helper是 DataValidationHelper helper = sheet.getDataValidationHelper()
try {
            // hiddenSheet不存在的时候创建 存在的时候修改
            // 创建一个隐藏的sheet,存放下拉框选项
            String hiddenName = "hiddenSelect" + column;
            Sheet hiddenSheet = null;
            Cell cell = null;
            if (workbook.getSheet(hiddenName) == null) {
                hiddenSheet = workbook.createSheet(hiddenName);
                // 把下拉框列表数据放进隐藏sheet
                for (int i = 0; i < selectList.size(); i++) {
                    Row row = hiddenSheet.createRow(i);
                    cell = row.createCell(0);
                    cell.setCellValue(selectList.get(i));
                }
            } else {
                hiddenSheet = workbook.getSheet(hiddenName);
                // 把下拉框列表数据更新至隐藏sheet
                for (int i = 0; i < selectList.size(); i++) {
                    Row row = hiddenSheet.getRow(i);
                    cell = row.getCell(0);
                    cell.setCellValue(selectList.get(i));
                }
            }
            // 名称管理器 存在的时候修改 不存在的时候新增
            Name nameCell = null;
            if (workbook.getName(hiddenName) == null) {
                nameCell = workbook.createName();
                nameCell.setNameName(hiddenName);
            } else {
                nameCell = workbook.getName(hiddenName);
            }
            // 设置名称管理器的范围
            nameCell.setRefersToFormula(hiddenName + "!$A$1:$A$" + selectList.size());
            // 隐藏sheet
            workbook.setSheetHidden(workbook.getSheetIndex(hiddenSheet), true);
            // 设置下拉框作用范围
            CellRangeAddressList addressList = new CellRangeAddressList(fromRow, endRow, column, column);
            DataValidationConstraint constraint = null;
            DataValidation validation = null;
            constraint = helper.createFormulaListConstraint(hiddenSheet.getSheetName());
            validation = helper.createValidation(constraint, addressList);
            // 数据校验
            validation.setSuppressDropDownArrow(true);
            validation.setShowErrorBox(true);
            targetSheet.addValidationData(validation);
        } catch (Exception e) {
            logger.error("<<<<<<< create template error cause {}", e);
        }
}

在下拉框选项比较少的时候可以直接设置下拉框选项,在下拉框数据较多的时候需要在一个新的sheet加入下拉框数据,然后隐藏该sheet。为了方便,此处都是把下拉框数据加入到了隐藏sheet中。

Original: https://www.cnblogs.com/boboray/p/16720701.html
Author: 啵啵ray
Title: java实现设置Excel下拉框

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/569095/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang中的数组、切片以及map

    一、固定长度数组 1.定义长度固定的数组,如:var arr [10] int;获取数组的长度,使用len函数,即len(arr)。 2.定义长度固定的数组,且初始化,如:arr …

    Java 2023年6月13日
    076
  • Slf4j的MDC初尝试

    本人使用Java两年时间,鉴于经验有限,在开发java后端代码过程中,为了定位问题,希望同一个线程的requestId可以从web层的日志一直输出到dao层,这样使用Linux命令…

    Java 2023年6月13日
    092
  • 多线程顺序运行的 4 种方法,面试随便问!

    文章介绍4种方法,简单易懂,通过4个demo抛砖引玉。 通过 join()方法使当前线程”阻塞”,等待指定线程执行完毕后继续执行。 举例:在线程thread…

    Java 2023年5月29日
    084
  • 1438. Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit

    题目: Given an array of integers nums and an integer limit, return the size of the longest n…

    Java 2023年5月29日
    072
  • Linux常用的命令

    1 常用的系统工作命令 man 命令用来查看man命令自身的帮助信息 MAN(1) Manual pager utils MAN(1) NAME man – an interfac…

    Java 2023年6月8日
    082
  • 共读《redis设计与实现》-数据结构篇

    准备将之前攒下的书先看一遍,主要是有个大概的了解,以后用的时候也知道在哪里找。所以准备开几篇共读的帖子,激励自己多看一些书。 Redis 基于 &#x7B80;&#…

    Java 2023年6月7日
    080
  • 一个牛逼的FTP——Wring Ftp

    背景:总公司内网有一部分文档需要共享,想要一个能便捷管理的文档系统 需求:分帐号授权,有的帐号只能看,有的帐号只能新增,有的帐号可以增删改查,另外可以便捷的对帐号进行管理 方法: …

    Java 2023年6月8日
    0113
  • mybatis collection解析以及和association的区别

    1.collection标签 说到mybatis的collection标签,我们肯定不陌生,可以通过它解决一对多的映射问题,举个例子一个用户对应多个系统权限,通过对用户表和权限表的…

    Java 2023年6月9日
    076
  • Maven 依赖调解源码解析(四):传递依赖,第一声明者优先

    本文是系列文章《Maven 源码解析:依赖调解是如何实现的?》第四篇,主要介绍依赖调解的第二条原则:传递依赖,第一声明者优先。请按顺序阅读其他系列文章,系列文章总目录参见:http…

    Java 2023年6月16日
    0100
  • HMdubbo1.1【分布式系统中的相关概念】

    1 大型互联网项目架构目标 1.1 传统项目与互联网项目 1.2 互联网项目特点 用户多 流量大,并发高 海量数据 易受攻击 功能繁琐 变更快 1.3 衡量网站的性能指标 响应时间…

    Java 2023年6月5日
    073
  • 解决eclipse为什么不能查看源码

    自己学习路上用过的方法,有帮助记得点赞哟~ Java eclipse中查看源代码ctrl+左键单击 一、你是第一次使用该功能,没有导入项目源码,故无法查看源码 解决方法: ​1.点…

    Java 2023年6月5日
    091
  • 若依框架,导出功能

    若依框架 ,导出功能完善,前后台代码 开发过程中发现一个bug,就是关于导出功能的前端直接使用$.table.exportExcel(),发现有一个bug,就是选中一个人,导出的居…

    Java 2023年6月5日
    088
  • 多线程与高并发(三)—— 源码解析 AQS 原理

    一、前言 AQS 是一个同步框架,关于同步在操作系统(一)—— 进程同步 中对进程同步做了些概念性的介绍,我们了解到进程(线程同理,本文基于 JVM 讲解,故下文只称线程)同步的工…

    Java 2023年6月9日
    075
  • hutool包里的ObjectUtil.isNull和ObjectUtil.isEmpty的区别

    大家都用过 hutool包把,包路径为: cn.hutool.core.util,最近再使用的过程中一直没高明白ObjectUtil.isEmpty和ObjectUtil.isNu…

    Java 2023年6月7日
    066
  • 9.NIO 核心1:缓冲区(Buffer)

    static xxxBuffer allocate(int capacity):&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&a…

    Java 2023年6月5日
    082
  • 实现随机验证码

    Java实现随机验证码的生成 随机验证码: 法一:普通方法 核心逻辑: 1.定义一个String类型的变量存储验证码字符。 2.定义一个for循环,循环n次(n为验证码的所需要字符…

    Java 2023年6月6日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球