【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项目模块分层?来这手把手教你!

相关推荐
一只乔哇噻8 分钟前
java后端工程师进修ing(研一版‖day49)
java·开发语言
稻草猫.11 分钟前
Java线程安全:volatile与wait/notify详解
java·后端·idea
无敌最俊朗@41 分钟前
MQTT 关键特性详解
java·前端·物联网
JAVA学习通41 分钟前
微服务项目->在线oj系统(Java-Spring)----[前端]
java·开发语言·前端
拾贰_C1 小时前
【SpringBoot】前后端联动实现条件查询操作
java·spring boot·后端
GUIQU.3 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
whltaoin6 小时前
SpringCloud 项目阶段九:Kafka 接入实战指南 —— 从基础概念、安装配置到 Spring Boot 实战及高可用设计
spring boot·spring cloud·kafka
callJJ7 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
wangjialelele7 小时前
Linux中的线程
java·linux·jvm·c++
谷咕咕7 小时前
windows下python3,LLaMA-Factory部署以及微调大模型,ollama运行对话,开放api,java,springboot项目调用
java·windows·语言模型·llama