EasyExcel多列单元格设置下拉框
项目场景:
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多列单元格设置下拉框相关推荐
- Pyqt5 在表格中单元格设置下拉框,并根据选项改变背景颜色
关于怎么在表格中单元格设置下拉框,并根据选项改变背景颜色 def table_combox_init(self):combox_statePlm_jria_list = ['', '无', 'O', ...
- ALV单元格设置下拉框固定值
老规矩先上效果图: 1.输出ALV 加个字段 2.设置下拉框的值 FORM SET_DRDN_TABLE .DATA:LT_DROPDOWN TYPE LVC_T_DROP,LS_DROPDOWN T ...
- 基于java + easyExcel实现模板填充生成动态模板并设置指定单元格为下拉框样式
需求描述:java后端开发过程中,为了满足动态生成excel模板并设置指定单元格为下拉框,且下拉框的数据项来源为动态查询的需求,在基于easyExcel的情况下,使用模板填充的方式,完成该需求. 1. ...
- ag-grid 单元格编辑-下拉框
一.基本下拉框 效果如下: 选中后的值直接就是界面显示的值(也是代码中定义的值).效果如下: 二.有id 的下拉框 这个下拉框跟平常用的select 框类似,设置id和value,在界面选择的时候显示 ...
- LibreOffice/Calc:单元格设置下拉菜单
造冰箱的大熊猫,本文适用于LibreOffice Calc 5.1.6.2 + Ubuntu 16.04@cnblogs 2019/1/2 LibreOffice是一个类似Microsoft Off ...
- 单元格只能下拉框选_excel给单元格添加下拉菜单列表无需按键盘用鼠标选择即可...
excel给单元格添加下拉菜单列表无需按键盘用鼠标选择即可 时间:2013-12-08 作者:snow 来源:互联网 为了方便快速的输入数据,通常情况下我们会给单元格添加一个下拉菜单,如此一来 ...
- handsontable 给单元格设置下拉 菜单
handsontable 可以扩展 render 和编辑功能,当然自己扩展还是很麻烦的. 默认给了这么几种单元格类型 "autocomplete" or Handsontable. ...
- Excel的单元格设置下拉选项并填充颜色
如何在Excel的单元格中加入下拉选项 方法/步骤 第一步:打开excel文档,选中需加入下拉选项的单元格. 第二步:点击菜单中的"数据"->"数据有效性" ...
- Excel单元格设置下拉选项
首先选中需要设置下拉选项的单元格. 点击数据验证. 在验证条件→允许中,选择序列 在来源中输入下拉选项中需要展现的内容,内容之间使用英文逗号间隔. 设置成功.
最新文章
- React组件常用设计模式之Render Props
- iOS安全之class-dump的安装和使用
- charles: 使用小结
- 求助:如何在Vista系统环境下增加系统盘C盘的容量?
- 2/100. Hamming Distance
- python导入pandas具体步骤方法_python导入pandas具体步骤方法
- OpenCV精进之路(三):图像处理——形态学滤波(膨胀、腐蚀、开闭运算)
- MySQL 添加列 修改列 删除列
- java哪个软件编程好学吗_有什么好学的编程语言吗?
- Word2003及Excel2003打开速度慢,如何解决?
- javascript计算两个时间差
- Vue解决跨域问题方案
- winscp连接linux时提示连接失败OOPS:cannot change directory:/home/....什么的原因以及解决方案
- 【Kickstart】2019 Round A - Parcels
- javascript正则迷你书-笔记
- 关于批量插入一组数据
- 计算机图形学(曲线造型)
- Springboot—mysql+mybatis+generator插件
- Xshell 使用技巧
- PMP考试自学可以吗? 一分钟让你搞清楚