项目场景:

EasyExcel官网文档地址:

https://easyexcel.opensource.alibaba.com/docs/current/

项目场景:实际开发中,需要用到很多下拉框去供使用者选择特定得值,但是easyExcel官方文档中提供得示例很简单,只有1个列有下拉框。在此分享一下多列下拉框得心得体会。

代码

直接上代码,许多地方 我都会有注释

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;import java.util.*;@Slf4j
public class SheetUtil implements SheetWriteHandler {/*** 设置下拉框的起始行,默认为第二行,可通过后续传参改变*/private final static int firstRow = 1;/*** 设置下拉框得结束行行,默认为最后一行*/private final static int lastRow = 0x10000;/*** Integer 是需要设置下拉框得列* List<String> 是该列下拉框得值*/private LinkedHashMap<Integer, List<String>> fieldValues;/*** 完成赋值,上面得起始列,结束列也可以如此实现*/public SheetUtil(LinkedHashMap<Integer, List<String>> fieldValues) {this.fieldValues = fieldValues;}/*** 创建sheet 操作*/@Overridepublic void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {//获取sheet页Sheet sheet = writeSheetHolder.getSheet();DataValidationHelper helper = sheet.getDataValidationHelper();fieldValues.forEach((k, v) -> {//设置下拉框得起始行,结束行,起始列,结束列CellRangeAddressList list = new CellRangeAddressList(firstRow, lastRow, k, k);//将数字转化为 A-Z 格式String excelLine = getExcelLinke(k);//重新定义一个隐藏得sheet名称为 xxx(自己爱取啥名就取啥名)+ kString sheetName = "xxx" + k;//创建sheet,突破下拉框255得限制Workbook workbook = writeWorkbookHolder.getWorkbook();Sheet workbookSheet = workbook.createSheet(sheetName);for (int i = 0; i < v.size(); i++) {//row 表示开始得行数,cell表示开始得列数workbookSheet.createRow(i).createCell(k).setCellValue(v.get(i));}Name name = workbook.createName();name.setNameName(sheetName);//下拉框设置String refers = sheetName + "!$" + excelLine + "$1:$" + excelLine + "$" + (v.size() + 1);name.setRefersToFormula(refers);//设置为隐藏int index = workbook.getSheetIndex(sheetName);if (!workbook.isSheetHidden(index)) {workbook.setSheetHidden(index, true);}DataValidationConstraint constraint = helper.createFormulaListConstraint(refers);DataValidation dataValidation = helper.createValidation(constraint, list);//适配 office ,配置很多得话,office会把初始话表格if (dataValidation instanceof XSSFDataValidation) {dataValidation.setSuppressDropDownArrow(true);dataValidation.setShowErrorBox(true);} else {dataValidation.setSuppressDropDownArrow(false);}sheet.addValidationData(dataValidation);});log.info("sheet写入完成!");}/*** 返回excel列标A-Z-AA-ZZ*/private String getExcelLinke(int num) {String line = "";int first = num / 26;int second = num % 26;if (first > 0) {line = (char) ('A' + first - 1) + "";}line += (char) ('A' + second) + "";return line;}}

文中也参考了比较多其他博主得帖子,项目做完也找不到记录了(主要是懒)

EasyExcel多列单元格设置下拉框相关推荐

  1. Pyqt5 在表格中单元格设置下拉框,并根据选项改变背景颜色

    关于怎么在表格中单元格设置下拉框,并根据选项改变背景颜色 def table_combox_init(self):combox_statePlm_jria_list = ['', '无', 'O', ...

  2. ALV单元格设置下拉框固定值

    老规矩先上效果图: 1.输出ALV 加个字段 2.设置下拉框的值 FORM SET_DRDN_TABLE .DATA:LT_DROPDOWN TYPE LVC_T_DROP,LS_DROPDOWN T ...

  3. 基于java + easyExcel实现模板填充生成动态模板并设置指定单元格为下拉框样式

    需求描述:java后端开发过程中,为了满足动态生成excel模板并设置指定单元格为下拉框,且下拉框的数据项来源为动态查询的需求,在基于easyExcel的情况下,使用模板填充的方式,完成该需求. 1. ...

  4. ag-grid 单元格编辑-下拉框

    一.基本下拉框 效果如下: 选中后的值直接就是界面显示的值(也是代码中定义的值).效果如下: 二.有id 的下拉框 这个下拉框跟平常用的select 框类似,设置id和value,在界面选择的时候显示 ...

  5. LibreOffice/Calc:单元格设置下拉菜单

     造冰箱的大熊猫,本文适用于LibreOffice Calc 5.1.6.2 + Ubuntu 16.04@cnblogs 2019/1/2 LibreOffice是一个类似Microsoft Off ...

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

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

  7. handsontable 给单元格设置下拉 菜单

    handsontable 可以扩展 render 和编辑功能,当然自己扩展还是很麻烦的. 默认给了这么几种单元格类型 "autocomplete" or Handsontable. ...

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

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

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

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

最新文章

  1. React组件常用设计模式之Render Props
  2. iOS安全之class-dump的安装和使用
  3. charles: 使用小结
  4. 求助:如何在Vista系统环境下增加系统盘C盘的容量?
  5. 2/100. Hamming Distance
  6. python导入pandas具体步骤方法_python导入pandas具体步骤方法
  7. OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
  8. MySQL 添加列 修改列 删除列
  9. java哪个软件编程好学吗_有什么好学的编程语言吗?
  10. Word2003及Excel2003打开速度慢,如何解决?
  11. javascript计算两个时间差
  12. Vue解决跨域问题方案
  13. winscp连接linux时提示连接失败OOPS:cannot change directory:/home/....什么的原因以及解决方案
  14. 【Kickstart】2019 Round A - Parcels
  15. javascript正则迷你书-笔记
  16. 关于批量插入一组数据
  17. 计算机图形学(曲线造型)
  18. Springboot—mysql+mybatis+generator插件
  19. Xshell 使用技巧
  20. PMP考试自学可以吗? 一分钟让你搞清楚

热门文章

  1. MacOS 优化指南 - 打造最舒适的交互体验
  2. Windows卡死问题分析
  3. macOS Big Sur 11.0(20A5343i)原版镜像
  4. 文能无人驾驶,武能养猪种田,边缘AI为什么火?
  5. 四、Transforms
  6. Vmware WorkStation的三种联网方式
  7. Lodash.js:实用的工具库
  8. 布隆过滤器速度_布隆过滤器,你也可以处理十几亿的大数据
  9. 深度神经网络压缩与加速总结
  10. 毕业设计--------登录鉴权