前言
🍊缘由
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.关键代码
/**
* 根据学生列表动态生成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.重点剖析
初始化数据验证帮助器,用于创建下拉列表
DataValidationHelper validationHelper = sheet.getDataValidationHelper();
创建下拉列表约束,使用学生兴趣爱好数据填充下拉选项
将需要动态填充的列表填充下拉选项,也就是下面的hobbyData
DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(hobbyData.toArray(new String[0]));
定义下拉列表的应用区域,此处假设兴趣爱好列在Excel的E列(索引4)
CellRangeAddressList addressList = new CellRangeAddressList(1+rowIndex, 1+rowIndex, 4, 4);
可以看一下CellRangeAddressList的入参,第一项是开始行,第二项是结束行,第三项是开始列,第四项是结束列
public CellRangeAddressList(int firstRow, int lastRow, int firstCol, int lastCol) {
this();
this.addCellRangeAddress(firstRow, firstCol, lastRow, lastCol);
}
创建数据验证规则,结合约束条件和应用区域
// 创建数据验证规则,结合约束条件和应用区域
DataValidation validation = validationHelper.createValidation(constraint, addressList);
// 将数据验证规则添加到工作表中
sheet.addValidationData(validation);
总结
本文介绍了如何使用 EasyPOI 库在导出 Excel 文件时为特定列动态生成下拉列表。
通过 DataValidationHelper 工具,可以根据每个学生的兴趣爱好数据,在 Excel 创建动态下拉列表。
具体步骤包括初始化数据验证帮助器、创建下拉列表约束、定义应用区域以及将数据验证规则添加到工作表中。
🍈猜你想问
如何与狗哥联系进行探讨
1. 关注公众号【JavaDog程序狗】
公众号回复【入群】或者【加入】,便可成为【程序员学习交流摸鱼群】的一员,问题随便问,牛逼随便吹,目前群内已有超过350+个小伙伴啦!!!
2.踩踩狗哥博客
里面有狗哥的私密联系方式呦 😘
大家可以在里面留言,随意发挥,有问必答
🍯猜你喜欢
文章推荐
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
【项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小项目
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【模块分层】还不会SpringBoot项目模块分层?来这手把手教你!