【java】easypoi导出excel单元格,填充动态下拉列

前言

🍊缘由

easypoi导出填充动态下拉列,是谁提出这么无理的需求

实例以学生纬度 ,不同学生有不同的兴趣爱好。实现导出每个人对应的最喜欢的爱好或兴趣动态下拉列表,详见下图导出excel的E列

🐣闪亮主角

大家好,我是JavaDog程序狗

以往导出excel,都是类似字典映射,如性别:1-男;2-女,如下图

但是像easypoi导出动态下拉列,如下图所示,头次碰见觉得好玩遂特意跟小伙伴们分享一下,可以少走些弯路!

😈你想听的故事

本狗年前参与了一个小项目,整体功能不难,但其中最令我记忆深刻的就是这个easypoi导出excel填充动态下拉列!

场景是在导出时,需要将每一条数据中某一列动态展示下拉,每一条都不同,所以之前使用的easypoi的注解导出方式就行不通。

于是乎,查看了文档,纠结了半天,终于在自己浑厚的知识下硬了起来......

🎁如何获取源码

公众号:【JavaDog程序狗】

关注公众号,发送 "easypoi",无任何套路即可获得!

正文

🎯主要目标

easypoi导出excel填充动态下拉列

🍪目标讲解

easypoi导出动态下拉列

1.解决方案

通过DataValidationHelper数据验证帮助器,用于创建下拉列表

DataValidationHelper 是 EasyPOI 库中用于数据验证的辅助工具。EasyPOI 是一个基于 Apache POI 的 Java 操作 Excel 的工具库,简化了 Excel 文件的读写操作。以下是 DataValidationHelper 的一些关键点:

  • 作用:用于在 Excel 中设置数据验证规则,比如下拉列表、数值范围等。

  • 使用场景:当你需要确保用户输入的数据符合特定规则时,可以使用 DataValidationHelper 来创建这些规则。

2.关键代码
java 复制代码
/**
  * 根据学生列表动态生成Excel工作表中的下拉列表
  * 此方法旨在通过学生兴趣爱好数据,在Excel工作表中创建动态下拉列表,以提高数据输入的准确性和效率
  *
  * @param workbook Excel工作簿对象,用于访问和操作工作表
  * @param mockStudentListCopy 学生对象列表的副本,确保操作不会影响原始数据
  */
 private static void dynamicSelectList(Workbook workbook, List<Student> mockStudentListCopy) {
     // 获取工作簿中的第一个工作表
     Sheet sheet = workbook.getSheetAt(0);
     // 初始化数据验证帮助器,用于创建下拉列表
     DataValidationHelper validationHelper = sheet.getDataValidationHelper();

     // 遍历学生列表,为每个学生在Excel中创建对应的下拉列表
     for (int rowIndex = 0; rowIndex <= mockStudentListCopy.size() - 1; rowIndex++) {
         // 获取当前学生的兴趣爱好列表
         List<String> hobbyData = mockStudentListCopy.get(rowIndex).getHobby();
         // 创建下拉列表约束,使用学生兴趣爱好数据填充下拉选项
         DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(hobbyData.toArray(new String[0]));
         // 定义下拉列表的应用区域,此处假设兴趣爱好列在Excel的E列(索引4)
         CellRangeAddressList addressList = new CellRangeAddressList(1+rowIndex, 1+rowIndex, 4, 4);
         // 创建数据验证规则,结合约束条件和应用区域
         DataValidation validation = validationHelper.createValidation(constraint, addressList);
         // 将数据验证规则添加到工作表中
         sheet.addValidationData(validation);
     }
 }
3.重点剖析
初始化数据验证帮助器,用于创建下拉列表
java 复制代码
DataValidationHelper validationHelper = sheet.getDataValidationHelper();
创建下拉列表约束,使用学生兴趣爱好数据填充下拉选项

将需要动态填充的列表填充下拉选项,也就是下面的hobbyData

java 复制代码
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(hobbyData.toArray(new String[0]));
定义下拉列表的应用区域,此处假设兴趣爱好列在Excel的E列(索引4)
java 复制代码
 CellRangeAddressList addressList = new CellRangeAddressList(1+rowIndex, 1+rowIndex, 4, 4);

可以看一下CellRangeAddressList的入参,第一项是开始行,第二项是结束行,第三项是开始列,第四项是结束列

java 复制代码
public CellRangeAddressList(int firstRow, int lastRow, int firstCol, int lastCol) {
        this();
        this.addCellRangeAddress(firstRow, firstCol, lastRow, lastCol);
    }
创建数据验证规则,结合约束条件和应用区域
java 复制代码
// 创建数据验证规则,结合约束条件和应用区域
DataValidation validation = validationHelper.createValidation(constraint, addressList);
// 将数据验证规则添加到工作表中
sheet.addValidationData(validation);

总结

本文介绍了如何使用 EasyPOI 库在导出 Excel 文件时为特定列动态生成下拉列表。

通过 DataValidationHelper 工具,可以根据每个学生的兴趣爱好数据,在 Excel 创建动态下拉列表。

具体步骤包括初始化数据验证帮助器、创建下拉列表约束、定义应用区域以及将数据验证规则添加到工作表中。

🍈猜你想问

如何与狗哥联系进行探讨

1. 关注公众号【JavaDog程序狗】

公众号回复【入群】或者【加入】,便可成为【程序员学习交流摸鱼群】的一员,问题随便问,牛逼随便吹,目前群内已有超过350+个小伙伴啦!!!

2.踩踩狗哥博客

javadog.net

里面有狗哥的私密联系方式呦 😘

大家可以在里面留言,随意发挥,有问必答

🍯猜你喜欢

文章推荐

【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)

【规范】看看人家Git提交描述,那叫一个规矩

【项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小项目

【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

【模块分层】还不会SpringBoot项目模块分层?来这手把手教你!

相关推荐
星如雨グッ!(๑•̀ㅂ•́)و✧3 分钟前
WebFlux onErrorContinue 和 onErrorResume使用详解
java·人工智能
电商API&Tina9 分钟前
电商数据采集API接口||合规优先、稳定高效、数据精准
java·javascript·数据库·python·json
zjjsctcdl26 分钟前
springBoot发布https服务及调用
spring boot·后端·https
观测云1 小时前
SpringBootAI 接入观测云 MCP 最佳实践
spring boot·观测云·mcp
zdl6861 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情1 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player1 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明1 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
RuoyiOffice1 小时前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue
鹤旗1 小时前
While语句,do-while语句,for语句
java·jvm·算法