发生情景:
最近使用到了模板导出功能,最开始使用的是hutool的POI工具,但是做下拉列表的时候,addSelect方法报错;

问题:
Excel在添加自定义下拉数据的时候,输入内容不能大于255个字符,这在做一些简单的下拉选项时没有问题,但是在下拉选项数据量过大时,就得换一种方式了——即‘从单元格选择下拉选项’,但是在hutool的官网API手册中未发现此内方法,所以转战POI

解决方案:
在创建Excel时新建一个sheet页, 将需要下拉的数据写到新建的sheet页中, 然后再对所需列设置下拉单元格即可;话不多说,下面贴代码。

代码:

  1. maven引入POI的包,注意两个包的版本需一致,不然会报错。
     <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency>

2.在你的Excel工具类中添加下面两个方法

    /*** 设置下拉框数据* @param wb       表格对象* @param typeName 要渲染的sheet名称* @param values   下拉框的值* @param col      下拉列的下标* @author Hower Wong* @date 2022年5月27日*/public static void setDropDownBox(XSSFWorkbook wb, String typeName, String[] values, Integer col) {//获取所有sheet页个数int sheetTotal = wb.getNumberOfSheets();//处理下拉数据if (values != null && values.length != 0) {//新建一个sheet页String hiddenSheetName = "hiddenSheet";XSSFSheet hiddenSheet = wb.getSheet(hiddenSheetName);if (hiddenSheet == null) {hiddenSheet = wb.createSheet(hiddenSheetName);sheetTotal++;}// 获取数据起始行int startRowNum = hiddenSheet.getLastRowNum() + 1;int endRowNum = startRowNum;//写入下拉数据到新的sheet页中for (int i = 0; i < values.length; i++)hiddenSheet.createRow(endRowNum++).createCell(0).setCellValue(values[i]);//将新建的sheet页隐藏掉wb.setSheetHidden(sheetTotal - 1, true);//获取新sheet页内容String strFormula = hiddenSheetName + "!$A$" + ++startRowNum + ":$A$" + endRowNum;// 设置下拉XSSFSheet mainSheet = wb.getSheet(typeName);mainSheet.addValidationData(SetDataValidation(wb, strFormula, 1, 65535, col, col));}}/*** 返回类型 DataValidation* @param wb         表格对象* @param strFormula formula* @param firstRow   起始行* @param endRow     终止行* @param firstCol   起始列* @param endCol     终止列* @return 返回类型 DataValidation*/public static DataValidation SetDataValidation(Workbook wb, String strFormula, int firstRow, int endRow, int firstCol, int endCol) {CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);DataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) wb.getSheet("typelist"));DataValidationConstraint formulaListConstraint = dvHelper.createFormulaListConstraint(strFormula);return dvHelper.createValidation(formulaListConstraint, regions);}

3.在你的代码中使用方法即可

以上POI对设置下拉选项的工具方法,希望对大家有所帮助!

JAVA 通过POI实现Excel从单元格选择下拉选项相关推荐

  1. Excel的单元格设置下拉选项并填充颜色

    如何在Excel的单元格中加入下拉选项 方法/步骤 第一步:打开excel文档,选中需加入下拉选项的单元格. 第二步:点击菜单中的"数据"->"数据有效性" ...

  2. 如何在Excel给单元格创建下拉选项

    方法一:WPS专用 选择目标单元格,点击菜单栏中的"数据">"插入下拉列表",即可添加下拉列表 方法二:通用 选择目标单元格,点击菜单栏中的"数 ...

  3. Excel怎样操作给单元格添加下拉选项?分享经验!如何给Excel单元格加入下拉列表?

    Excel作为一款电子表格软件,现已成为我们大家记录数据.处理数据中使用最为频繁的软件,我们大家在整理数据中为了简便快捷的使用,会想要在单元格中添加一个下拉菜单,这样会让我们的使用更加方便,那么下面小 ...

  4. Excel如何给单元格添加下拉选项?实用小技巧!怎样给单元格加入下拉列表?

    Excel作为一款电子表格软件,现已成为我们大家记录数据.处理数据中使用最为频繁的软件,我们大家在整理数据中为了简便快捷的使用,会想要在单元格中添加一个下拉菜单,这样会让我们的使用更加方便,那么下面小 ...

  5. Excel单元格设置下拉选项

    首先选中需要设置下拉选项的单元格. 点击数据验证. 在验证条件→允许中,选择序列 在来源中输入下拉选项中需要展现的内容,内容之间使用英文逗号间隔. 设置成功.

  6. java用poi 生成excel并单元格,字体,样式

    1.最近根据客户需求,需要生成要求的excell 格式 索性研究了下用POI 生成这个excel的功能,poi可以合并单元格(合并列,全并行)及字体,边框等,能满足大部分格式样式,写了个简单的测试列子 ...

  7. Java使用poi读取Excel文件单元格内容进行处理

    使用poi读取单元格内容,如果是整数读取之后 后端获取却是小数所以需要处理一下 public static String getStringValue(XSSFCell cell) {NumberFo ...

  8. poi怎么设置某个单元格为下拉框_java excel 多选下拉列表设置

    方案二 方案二的思路是在excel中添加一个隐藏的sheet存放数据源(下拉的数据),在真正需要下拉的sheet单元格写入属性. 1.需要使用到的util类 package com.excel.sel ...

  9. EasyExcel 实现单元格数据下拉选

    EasyExcel 实现单元格数据下拉选 前言 easyExcel导出模板的时候,固定的某个列我们有固定的是选项值的时候,我们需要将excel的单元格做成下拉选的情况:满足实际的业务需求. 实现 1. ...

  10. 单元格只能下拉框选_excel给单元格添加下拉菜单列表无需按键盘用鼠标选择即可...

    excel给单元格添加下拉菜单列表无需按键盘用鼠标选择即可 时间:2013-12-08   作者:snow   来源:互联网 为了方便快速的输入数据,通常情况下我们会给单元格添加一个下拉菜单,如此一来 ...

最新文章

  1. 【自动驾驶】12.百度Apollo对ROS的优化【详细干货】
  2. HDU 1561 The more ,The Better
  3. ubuntu16.04将普通用户提升至root权限
  4. 系统安全运维 Server 2008 R2 事件查看器实现日志分析
  5. 国家邮政局:3月中国快递发展指数为251.1 同比下降7.1%
  6. java四种修饰符_java中的四种修饰符
  7. Vim批量注释、替换和缩进
  8. 培训笔记——2019年性能测试
  9. Lc165-版本号比较
  10. Python教程大纲
  11. 157. PHP 闭标签
  12. php中strtotime函数,PHP中strtotime函数用法举例
  13. 学习 Python 之 Pygame 开发魂斗罗(九)
  14. Flutter如何强制竖屏
  15. Nginx服务器读取不到文件的转换方法
  16. vscode的插件使用
  17. 性能:到底什么是性能测试
  18. 模版之AnyType
  19. uniGUI之事项合集
  20. www.yaxjf.com+m.php,使用PHP保存微信文章页的图片

热门文章

  1. 造车新势力回港:蔚来能重拾“老大哥”头衔吗?
  2. sap 流程图 退货销售订单_ERP系统:退货流程的解决方案
  3. 美团外卖Android平台化架构演进实践
  4. java 怎么做批量修改_JAVA实现批量修改文件名称
  5. 2020switch电信最快的dns_求教电信宽带switch用哪个dns快
  6. 美术☀️PR去掉视频黑边、旋转视频、减小视频体积、设置视频封面
  7. 小米笔记本备份、SSD分区、U盘Ghost详解及对产品的建议
  8. GIS开发:客户端控制的地图样式
  9. POJ-3207-TwoSAT
  10. 如何解决windows资源管理器已停止工作?两种方法教会你