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

JavaDog程序狗
JavaDog程序狗
发布于 2025-02-24 / 28 阅读
0
0

【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.关键代码

/**
  * 根据学生列表动态生成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.踩踩狗哥博客

javadog.net

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

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

🍯猜你喜欢

文章推荐

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

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

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

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

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


评论