POI设置单元格下拉框
一、导出 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设置单元格下拉框的更多相关文章
- POI 生成带联动下拉框的excel表格
参考:https://www.cnblogs.com/cjbbk/p/7527276.html 解决POI3.17 与其它版本的不同的坑:https://blog.csdn.net/Weirdo_zh ...
- java操作Excel的poi 设置单元格的对其方式
设置单元格的对其方式 package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.po ...
- 20191012——POI设置单元格自动行高(思路)
在经过Jxls或者POI导出数据至excel中后,发现有的单元格内容太多,既没有自动换行,也没有自动增大行高.那如何通过Java代码来实现呢?请看下面步骤: (一)首先,将excel设置为最合适的行高 ...
- Excel设置数据有效性实现单元格下拉菜单的3种方法(转)
http://blog.csdn.net/cdefu/article/details/4129136 一.直接输入: 1.选择要设置的单元格,譬如A1单元格: 2.选择菜单栏的“数据”→“有效性”→出 ...
- JAVA poi设置单元格背景颜色
import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Ce ...
- poi 设置单元格公式
Cell cell= rowF2.createCell(18);cell.setCellFormula("=Q20*R20");
- angular 设置年份选择下拉框,并默认今年
<select ng-model="selectedYear" ng-change="yearChange(selectedYear)"> < ...
- checkbox勾选事件,JQ设置css,下拉框JQ选中
<input id="CheckMainCompany" type="checkbox"/> $(function() { $("#Che ...
- EXCEL设置三级下拉框
EXCEL设置三级下拉框 1.添加下拉框数据源 公式--->指定 公式--->名称管理器 2.设置第一级下拉框的值 3.第一级下拉框选出一个值 4.设置第二级下拉框(INDIRECT($A ...
- c# dataGridView cell添加下拉框
应用场景: dataGridView需要某一个cell变成下拉框样式. 思路详解: dataGridVie添加固定格式的row. 代码: DataGridViewRow row = new DataG ...
随机推荐
- TCP连接connect函数返回错误
如果是 TCP 套接字,那么调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回.其中出错返回可能有以下几种情况: 三次握手无法建立,客户端发出的 SYN 包没 ...
- Day 22 22.1.1:增量式爬虫 - 场景1的实现
场景1的实现: 数据指纹: 数据的唯一标识.记录表中可以不直接存储数据本身,直接存储数据指纹更好一些. 创建爬虫爬虫文件: cd project_name(进入项目目录) scrapy genspid ...
- JavaSE——面向对象(类与对象)
package com.zhao.test1; public class GirlFriend { //属性 String name; int age; String gender; //行为 pub ...
- leecode 22 括号生成
22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合. 示例 1: 输入:n = 3 输出:["((()))"," ...
- 「DIARY」PKUSC 2021 游记
冬令营没了但是还有夏令营 (完蛋,前两天忘写游记了,完全没想起来--最后一天补一补) 试题分析在另外一篇博客上 # Day 0 早上去机场的时候把手机落在出租车上了 (还好之后找回来了),导致我前两天 ...
- CF1561D Up the Strip
Up the Strip 题意 你现在在 \(n\) 号格子,你需要跳到 \(1\) 号格子,你可以有两种跳法: 你可以做减法,即选择一个数 \(k\in [1,n)\) ,从 \(n\) 跳到 \( ...
- Linux 三剑客常用命令
shell三剑客===================================================grep===================================== ...
- linux 中的errno 和 strerror(errno)
1. errno.h 中包含 errno 这个错误保存值 string.h 包含 strerror() 函数 ,它的原型 是 char *strerror(int errnum); 输入值应该是err ...
- react-signature-canvas 签名功能
基于移动端需要扫码签名的功能,这里记录一下. 1.使用 react-signature-canvas 插件,npm i react-signature-canvas --save 2.此功能签名后生成 ...
- servlet - 从本地下载图片
import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet. ...