POI设置excel添加列下拉框
POI在生成excel模板时需要为列添加下拉框,我写了两个方法。
@ 方法一:适用任何情况,不受下拉框值数量限制。但是需要通过引用其它列值。
思路大概如下:
1.创建一个隐藏的sheet页,用于存放下拉框的值。
HSSFSheet listSheet = workBook.createSheet("ShtDictionary");//隐藏的sheet,用于存放下拉框的限定值
2.将下拉框的值放置在隐藏sheet【ShtDictionary】某列
//rows表示下拉框限定值的个数
for(int i = 0 ;i<rows;i++){
String cellValue = ...;
listSheet.createRow(i).createCell(0).setCellValue(cellValue);
}
3.添加下拉框引用
setHSSFValidation(HSSFSheet sheet,String sheetName, int lastRow,String col, int firstRow, int endRow, int firstCol, int endCol)
@ 自定义方法详解
/**
* 设置某些列的值只能sheet中某列输入预制的数据,显示下拉框.
* @param HSSFSheet sheet 模板sheet页(需要设置下拉框的sheet)
* @param String sheetName 隐藏的sheet页,用于存放下拉框的值 (下拉框值对应一列)
* @param int lastRow 存放下拉框值的最后一行
* @param String col 存放下拉框值的列名 "A"
* @param int firstRow 添加下拉框对应开始行
* @param int endRow 添加下拉框对应结束行
* @param int firstCol 添加下拉框对应开始列
* @param int endCol 添加下拉框对应结束列
* @return HSSFSheet 设置好的sheet.
*/
public static HSSFSheet setHSSFValidation(HSSFSheet sheet,String sheetName, int lastRow,String col, int firstRow, int endRow, int firstCol, int endCol){
//设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
String cell = "\""+sheetName +"!$"+col+"$1:$"+col+"$"+lastRow+"\"";
System.out.println("下拉框列:"+cell);
// 这句话是关键 引用ShtDictionary 的单元格
DVConstraint constraint = DVConstraint.createFormulaListConstraint("INDIRECT("+cell+ ")");
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(dataValidate);
return sheet;
}
@ 方法二 :此方法仅仅使用下拉框值不超过232个的情况,优点是简单。
1.将下拉框的值存放在自定义的一个数组对象中 String[] textList
String[] textlist = ...;//下拉框显示的内容
2.添加下拉框引用
setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol);
@ setHSSFValidation
/**
* 设置某些列的值只能输入预制的数据,显示下拉框.
* @param HSSFSheet sheet 模板sheet页(需要设置下拉框的sheet)
* @param String[] textlist 下拉框显示的内容
* @param int firstRow 添加下拉框对应开始行
* @param int endRow 添加下拉框对应结束行
* @param int firstCol 添加下拉框对应开始列
* @param int endCol 添加下拉框对应结束列
* @return HSSFSheet 设置好的sheet.
*/
public static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol){
// 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow,endRow, firstCol, endCol);
// 加载下拉列表内容
DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
// 数据有效性对象
HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(data_validation_list);
return sheet;
}
@ 数据有效性对象【HSSFDataValidation】的相关方法:
// 设置提示内容,标题,内容
void org.apache.poi.hssf.usermodel.HSSFDataValidation.createPromptBox(String title, String text);

POI设置excel添加列下拉框的更多相关文章
- NPOI 生成Excel (单元格合并、设置单元格样式:字段,颜色、设置单元格为下拉框并限制输入值、设置单元格只能输入数字等)
NPIO源码地址:https://github.com/tonyqus/npoi NPIO使用参考:源码中的 NPOITest项目 下面代码包括: 1.包含多个Sheet的Excel 2.单元格合并 ...
- POI设置excel某列值为文本格式
excel单元格格式默认为[常规],当某列限定必须从下拉框选择一个纯数字文本的时候,必须将单元格格式设置为[文本]. 否则即使输入的值和下拉框的一致,excel都认为输入的值是常规类型,而下拉框的值为 ...
- 百度“搜索设置”之基于定位下拉框或者需要点击link才显示的下拉框,二次定位与多次定位实现的实际效果区别
还是基于上次那个练习的后续出现的思考,http://www.cnblogs.com/8013-cmf/p/6555790.html 界面: 源码: 写法如下: 继续解释这两种的区别: 1.其实基于定 ...
- 使用poi解决导出excel内下拉框枚举项较多的问题
废话少说,直接上代码: package com.fst.attachment.controller; import java.io.FileOutputStream; import org.apach ...
- EXCEL(1)级联下拉框
EXCEL级联下拉框 http://jingyan.baidu.com/article/3c343ff756e0cf0d377963f9.html 在输入一些多级项目时,如果输入前一级内容后,能够自动 ...
- DevExpress gridview下拉框的再次研究
原文:DevExpress gridview下拉框的再次研究 前几天写了一篇关于研究DevExpress gridview下拉框的随笔(DevExpress gridview下拉框repository ...
- 第二百一十二节,jQuery EasyUI,Combo(自定义下拉框)组件
jQuery EasyUI,Combo(自定义下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 Combo(自定义下拉框)组件的使用方 ...
- jQuery自定义多选下拉框
项目中需要自定义一个下拉框多选插件,业务问题还是自己实现比较好 通过$.fn 向jQuery添加新的方法 下拉数据通过参数传递进去,通过调用该插件时接收,选择后的确定与取消事件采用事件传递方式 代码如 ...
- jQuery无限级联下拉框插件
自己编写jQuery插件 之 无限级联下拉框 因为是级联,所以数据必须是树型结构的,我这里的测试数据如下: 看下效果图: 1.>图一: 2.>图二: 3.>图三: 由图可知,下拉 ...
随机推荐
- form表单提交图片禁止跳转
问题: 最近在做项目时,遇到上传图片需求,且在不跳转的情况下获取到返回信息 思路: 1. 使用ajax发送异步请求,经多次测试,最终以失败告终 2. iframe 禁止跳转(未尝试) 3. 修改fo ...
- HDU1027 Ignatius and the Princess II
Problem Description Now our hero finds the door to the BEelzebub feng5166. He opens the door and fin ...
- 在同一个sql语句中,统计不同条件的Count数量
前几天帮同事优化了个SQL,原写法使用多个子查询这里不再重现了,大家都遇到过这样一种情况,在项目后期的维护中, 修改别人的SQL代码,超过30行的语句,多层子查询,读起来很坑,时间久的项目伴随着人员的 ...
- iOS底层学习-KVC使用实践以及实现原理
简介 KVC(Key-value coding)键值编码,顾名思义.额,简单来说,是可以通过对象属性名称(Key)直接给属性值(value)编码(coding)"编码"可以理解为& ...
- NYOJ--32--SEARCH--组合数
按照思路写:深搜,r控制位数,位数为0输出否则递归 /* Name: NYOJ--32--搜索--组合数 Date: 14/04/17 16:48 Description: 深度优先搜索 */ #in ...
- vue指令v-bind示例解析
1.绑定一个属性 <img id="app" v-bind:src="imageSrc"> <script> var app = Vue ...
- Form表单中method=post/get两种数据传输的方式的区别
Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一 ...
- PAT1074 Reversing Linked List (25)详细题解
02-1. Reversing Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...
- 【Spring】的【bean】管理(XML配置文件)
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
- Vue.js 计算属性的秘密
计算属性是一个很邪门的东西,只要在它的函数里引用了 data 中的某个属性,当这个属性发生变化时,函数仿佛可以嗅探到这个变化,并自动重新执行. 上述代码会源源不断的打印出 b 的值.如果希望 a 依赖 ...