一、导出 Excel 单元格设置下拉框

日常开发中,导出基础数据为模版,填充信息后导入时,有时候会要求某些导入项应该为下拉框选择,一个是为了规范数据,也可以简化填充。

1.1 单元格下拉框选项总字符较少的情况

单元格设置的下拉框字符总数小于 250,可以在当前 sheet 页直接设置单元格下拉框,可以单个或批量设置。

  public static void setDropDown(Sheet sheet,int startRow,int maxRow,int startColumn, int maxColumn){
for (int j=startColumn; j<maxColumn; j++){
String attr = sheet.getRow(0).getCell(j).getStringCellValue().trim();
if (IBALegalMap.containsKey(attr) && !("Classification").equals(attr)){
//存在下拉值,取出存在的下拉值,转化为 String 数组
List<String> list = IBALegalMap.get(attr);
String[] str = list.toArray(new String[list.size()]);
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
XSSFDataValidationConstraint dvConstraint =
(XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(str);
//设置起始行结束后,起始列结束列
CellRangeAddressList addressList = new CellRangeAddressList(startRow,maxRow,j,j);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
sheet.addValidationData(validation);
}
}
}

1.2 单元格下拉框选项总字符较多的情况

单元格设置的下拉框字符总数大于 250,这种情况直接设置后,表格会报错,可以通过隐藏 Sheet 页的方式进行设置。

每列下拉框都需要设置一个隐藏 Sheet 页,名称不可重复。

 public static void setDropDown(Sheet sheet,int startRow,int maxRow,int startColumn, int maxColumn,Workbook workbook,String hideName){
//Row row = sheet.getRow(startRow);
for (int j=startColumn;j<maxColumn;j++){
String attr = sheet.getRow(0).getCell(j).getStringCellValue().trim();
if (IBALegalMap.containsKey(attr) && (!"Classification".equals(attr))){
String s = Integer.toString(j);
hideName = hideName + s;
List<String> list = IBALegalMap.get(attr);
String[] str = list.toArray(new String[list.size()]);
logger.debug(str+"str");
//隐藏 sheet 页名称不可重复
Sheet hidden = workbook.createSheet(hideName);
Cell cell = null;
for (int i=0; i<str.length;i++){
String name = str[i];
Row strRow = hidden.createRow(i);
cell = strRow.createCell(0);
cell.setCellValue(name);
}
Name nameCell = workbook.createName();
nameCell.setNameName(hideName);
nameCell.setRefersToFormula(hideName+"!$A$1:$A$"+str.length);
//设置隐藏页
workbook.setSheetHidden(workbook.getSheetIndex(hidden),true);
DataValidationConstraint constraint = null;
//设置起始行结束后,起始列结束列
CellRangeAddressList addressList = new CellRangeAddressList(startRow,maxRow,j,j);
DataValidation validation = null;
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
constraint = dvHelper.createFormulaListConstraint(hideName);
//将数据添加进去
validation =dvHelper.createValidation(constraint,addressList);
sheet.addValidationData(validation);
logger.debug("设置下拉完成");
}
}


图 1.3 数据导出

 

POI设置单元格下拉框的更多相关文章

  1. POI 生成带联动下拉框的excel表格

    参考:https://www.cnblogs.com/cjbbk/p/7527276.html 解决POI3.17 与其它版本的不同的坑:https://blog.csdn.net/Weirdo_zh ...

  2. java操作Excel的poi 设置单元格的对其方式

    设置单元格的对其方式 package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.po ...

  3. 20191012——POI设置单元格自动行高(思路)

    在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...

  4. Excel设置数据有效性实现单元格下拉菜单的3种方法(转)

    http://blog.csdn.net/cdefu/article/details/4129136 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的“数据”→“有效性”→出 ...

  5. JAVA poi设置单元格背景颜色

    import java.io.FileOutputStream; import java.io.IOException;   import org.apache.poi.ss.usermodel.Ce ...

  6. poi 设置单元格公式

    Cell cell= rowF2.createCell(18);cell.setCellFormula("=Q20*R20");

  7. angular 设置年份选择下拉框,并默认今年

    <select ng-model="selectedYear" ng-change="yearChange(selectedYear)"> < ...

  8. checkbox勾选事件,JQ设置css,下拉框JQ选中

    <input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...

  9. EXCEL设置三级下拉框

    EXCEL设置三级下拉框 1.添加下拉框数据源 公式--->指定 公式--->名称管理器 2.设置第一级下拉框的值 3.第一级下拉框选出一个值 4.设置第二级下拉框(INDIRECT($A ...

  10. c# dataGridView cell添加下拉框

    应用场景: dataGridView需要某一个cell变成下拉框样式. 思路详解: dataGridVie添加固定格式的row. 代码: DataGridViewRow row = new DataG ...

随机推荐

  1. WC2023 游记

    不是很会写游记,随便写写吧. 一些附件 讲课资料合集(压缩后 \(\rm 31MB\))太大了,可以去 U 群下载. 由于后面很多乐子,我把相关内容打包成 zip 上传上来了. 乐子合集下载链接.(这 ...

  2. (jmeter笔记)聚合报告分析

    Label:说明是请求类型,如Http, FTP等请求. #Samples:也就是图形报表中的样本数目,总共发送到服务器的样本数目. Average:也就是图形报表中的平均值,是总运行时间除以发送到服 ...

  3. idea提交时忽略.class、.iml文件和文件夹或目录的方法

    第一种方法 在Setings–> Editor --> File Types -->Ignore files and folders中添加需要忽略的文件和文件夹: .idea 忽略 ...

  4. Feign熔断

    在Feign中使用 @EnableFeignClients中已经默认打开了断路器功能,所以这里的启动类上不需要再加@EnableCircuitBreaker注解 只需要在@FeignClient中为f ...

  5. vue验证码倒计时60s

    vue3验证码倒计时60s //倒计时60s const timeNum = ref(60); const countDown = ref(); const isShowSend = ref(true ...

  6. 基于Python的简单读卡上位机界面

    使用到的模块,pyserial  pyqt5  pymysql (我先是实现在命令行下通过串口进行对板子硬件的控制,比如Led ,beep等,在实现检测卡(是否选卡成功),连接卡(验证哪一个扇区),读 ...

  7. vue组件淡入浅出动画

    点击动画 hello hello world! .test-enter, .test-leave-to { opacity: 0 } .test-enter-to, .test-leave { opa ...

  8. java mybatisplus+springboot服务器跨域问题

    项目本地增删改测试正常,上传到  阿里服  页面出现了 跨域报错问题! 解决方案:添加一个过滤器 package com.rl;import org.springframework.stereotyp ...

  9. 解决vs未能找到导入的项目

    本文解决的问题: VS显示"vs未找到导入XXX.vcxproj 项目,请确认 import 声明中的路径正确". 找到 修改成非只读,打开后删除所有诸如这样的 Import 标签 ...

  10. AS3.0和php数据交互POST方式

    AS3.0和php数据交互POST方式首先打开flash建立一个as3.0的文件拖 textarea和button组建到舞台上分别给两个组件命名:txtcontent和addcontent然后点第一帧 ...