当前位置: 首页 > news >正文

Java 使用 POI 导出Excel,实现单元格内容为下拉选项

在使用Apache POI的库生成Excel导入模板的时候,有时候需要设置某些列只能选择下拉选项中的内容,该如何实现这个特性呢?下面是一个示例代码,演示如何实现单元格只能从下拉中选择内容。

代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;public class ExcelDropDownDemo {public static void main(String[] args) {// 创建一个新的工作簿Workbook workbook = new XSSFWorkbook();// 创建一个新的工作表Sheet sheet = workbook.createSheet("Sheet1");// 设置单元格只能选择下拉内容// 创建下拉列表的内容String[] dropDownList = {"Option 1", "Option 2", "Option 3"};// 将下拉列表的内容设置到单元格中DataValidationHelper validationHelper = sheet.getDataValidationHelper();DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(dropDownList);// 设置数据验证的单元格范围CellRangeAddressList addressList = new CellRangeAddressList(0, 1000, 0, 0);DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);// 禁止输入非下拉列表中的内容dataValidation.setShowErrorBox(true);// 将数据验证添加到工作表中sheet.addValidationData(dataValidation);try (FileOutputStream fileOut = new FileOutputStream("DropDownExample.xlsx")) {// 将工作簿写入文件输出流workbook.write(fileOut);} catch (IOException e) {e.printStackTrace();}// 关闭工作簿try {workbook.close();} catch (IOException e) {e.printStackTrace();}}
}

这个示例代码将创建一个名为output.xlsx的Excel文件,并在该文件中演示如何添加一个只能选择下拉列表内容的单元格。

主要步骤:

  1. 创建下拉列表的内容:定义一个字符串数组dropDownList,其中包含下拉列表的选项。
  2. 设置数据验证的单元格范围:使用CellRangeAddressList指定要应用数据验证的单元格范围。
  3. 创建数据验证:使用DataValidationHelperDataValidationConstraint创建一个数据验证,并将其应用于指定的单元格范围。
  4. 添加数据验证:将数据验证添加到工作表中,并设置为显示错误框,以确保用户只能选择下拉列表中的内容。

这样就实现了在Excel文件中设置单元格只能选择下拉列表中的内容的功能。

效果图

image-20240728182121370

其他

另外,对以下内容感兴趣的同学请移步对应教程:

GPT-4o 教程

MidJourney教程

Poe教程

Fantia教程

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《计算机操作系统》(第4版)第10章 多处理机操作系统 复习笔记
  • Elasticsearch对象映射
  • 神经网络算法 - 一文搞懂Back Propagation(反向传播)
  • js去重的方法
  • Qt使用 QSetting 对 ini 配置文件进行操作
  • 游戏app激励视频广告预加载位置,最大化广告收益
  • 深入理解 CSS Flex 布局
  • git 项目可以拉取提交不了
  • Linux:文件操作
  • EV代码签名证书——消除软件下载时的安全警告
  • Qt之控件介绍
  • 推荐一个开箱即用的中后台前端解决方案,基于vue3开发,私活神器(带源码)
  • 项目初始化踩坑记录
  • 【Matlab】RF随机森林回归预测算法 可预测未来数据(附代码)
  • 计算机算法设计与分析【第一章】
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 「面试题」如何实现一个圣杯布局?
  • ➹使用webpack配置多页面应用(MPA)
  • Mybatis初体验
  • node.js
  • PhantomJS 安装
  • SQLServer之创建显式事务
  • XML已死 ?
  • 观察者模式实现非直接耦合
  • 计算机在识别图像时“看到”了什么?
  • 深度解析利用ES6进行Promise封装总结
  • 深入浅出Node.js
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小试R空间处理新库sf
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 一些关于Rust在2019年的思考
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 从如何停掉 Promise 链说起
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (06)金属布线——为半导体注入生命的连接
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (4)(4.6) Triducer
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (java)关于Thread的挂起和恢复
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (九)信息融合方式简介
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转) Face-Resources
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .net core 6 redis操作类
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET 常见的偏门问题
  • @Autowired注解的实现原理
  • @Bean, @Component, @Configuration简析
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配