【原创文章】JAVA-POI实现EXCEL下拉框的级联(POI生成Excel中带有可级联的下拉框)
2012-05-08 15:30
585 查看
原创文章,转载请注明原作者及出处链接,谢谢!
http://blog.csdn.net/wed840313
【实现思路】
首先我们来看一下Excel中是怎么实现下拉框的级联的:
1. 假设我们的Excel有两个sheet,第一个sheet需要有两个下拉框:地市、区县——其中区县作为地市的二级下拉框级联。下面是具体实现步骤:
2. 首先我们在“数据字典”这个sheet页中的B列为地市下拉框提供数据:
3. 然后我们继续在E列为区县的下拉框提供数据:(注意是所有的数据)
4. 下拉框数据准备好之后,我们需要在名称管理器中创建所谓的“名称”:
为地市下拉框创建名称:打开名称管理器,点击“新建”按钮,输入名称为“city”,引用的位置选择B列我们为地市下拉框提供的数据:
然后为区县下拉框创建名称:继续新建名称,名称起名为地市下拉框的第一个值“江苏”,引用的位置为E列中属于江苏的数据
继续新建名称,名称起名为地市下拉框的第二个值“宿迁”,引用位置为E列中属于宿迁的数据
如此反复,直到所有的地市名称与它所对应的区县数据关联起来。
5. 回到第一个sheet页中,选中需要添加“地市”下拉框的单元格
点击“数据”选项卡中的“数据有效性”
在允许一项中选择“序列”,来源中如图填写,与city名称关联起来
点击“确定”,我们可以看到地市的下拉框已经加上了:
6. 然后选中需要添加区县下拉框的单元格,点击“数据有效性”
允许一项选择“序列”,来源我们输入“INDIRECT”,后面括号中填写级联的父级下拉框,即这一行中的地市名称那个单元格
点击确定,级联工作至此完成
【POI实现】
有了Excel的实现方式,我们可以用同样的方式,在java后台生成这样的带有级联下拉框的EXCEL
我们准备如下方法:
在名称管理器中创建名称的方法:
设置数据有效性的方法:
有了这两个方法之后,我们在程序中对所有数据都写入完成之后,进行如下操作:
所以,利用POI实现Excel下拉框的级联并不困难,只要我们明白Excel下拉框的实现原理,再用POI来实现其实很简单。
原创文章,转载请注明原作者及出处链接,谢谢!
http://blog.csdn.net/wed840313
http://blog.csdn.net/wed840313
【实现思路】
首先我们来看一下Excel中是怎么实现下拉框的级联的:
1. 假设我们的Excel有两个sheet,第一个sheet需要有两个下拉框:地市、区县——其中区县作为地市的二级下拉框级联。下面是具体实现步骤:
2. 首先我们在“数据字典”这个sheet页中的B列为地市下拉框提供数据:
3. 然后我们继续在E列为区县的下拉框提供数据:(注意是所有的数据)
4. 下拉框数据准备好之后,我们需要在名称管理器中创建所谓的“名称”:
为地市下拉框创建名称:打开名称管理器,点击“新建”按钮,输入名称为“city”,引用的位置选择B列我们为地市下拉框提供的数据:
然后为区县下拉框创建名称:继续新建名称,名称起名为地市下拉框的第一个值“江苏”,引用的位置为E列中属于江苏的数据
继续新建名称,名称起名为地市下拉框的第二个值“宿迁”,引用位置为E列中属于宿迁的数据
如此反复,直到所有的地市名称与它所对应的区县数据关联起来。
5. 回到第一个sheet页中,选中需要添加“地市”下拉框的单元格
点击“数据”选项卡中的“数据有效性”
在允许一项中选择“序列”,来源中如图填写,与city名称关联起来
点击“确定”,我们可以看到地市的下拉框已经加上了:
6. 然后选中需要添加区县下拉框的单元格,点击“数据有效性”
允许一项选择“序列”,来源我们输入“INDIRECT”,后面括号中填写级联的父级下拉框,即这一行中的地市名称那个单元格
点击确定,级联工作至此完成
【POI实现】
有了Excel的实现方式,我们可以用同样的方式,在java后台生成这样的带有级联下拉框的EXCEL
我们准备如下方法:
在名称管理器中创建名称的方法:
/** * 创建名称 * @param wb * @param name * @param expression * @return */ public static HSSFName createName(HSSFWorkbook wb, String name, String expression){ HSSFName refer = wb.createName(); refer.setRefersToFormula(expression); refer.setNameName(name); return refer; }
设置数据有效性的方法:
/** * 设置数据有效性(通过名称管理器级联相关) * @param name * @param firstRow * @param endRow * @param firstCol * @param endCol * @return */ public static HSSFDataValidation setDataValidation(String name, int firstRow, int endRow, int firstCol, int endCol){ //设置下拉列表的内容 log.info("起始行:" + firstRow + "___起始列:" + firstCol + "___终止行:" + endRow + "___终止列:" + endCol); //加载下拉列表内容 DVConstraint constraint = DVConstraint.createFormulaListConstraint(name); // 设置数据有效性加载在哪个单元格上。 // 四个参数分别是:起始行、终止行、起始列、终止列 CellRangeAddressList regions = new CellRangeAddressList((short) firstRow, (short) endRow, (short) firstCol, (short) endCol); // 数据有效性对象 HSSFDataValidation data_validation = new HSSFDataValidation(regions, constraint); return data_validation; }
有了这两个方法之后,我们在程序中对所有数据都写入完成之后,进行如下操作:
//为地市下拉框创建名称 POIExcelUtil.createName(wb, "city", "数据字典!$B$2:$B$"+rowcity); //为地市下拉框设置数据有效性 HSSFDataValidation valicity = POIExcelUtil.setDataValidation("city", 2, row-1, 6, 6);
//为区县下拉框创建名称 POIExcelUtil.createName(wb, cityName, "数据字典!$E$"+tempcoun+":$E$"+rowcoun);
//为区县下拉框设置数据有效性,由于区县的下拉框是根据本行的地市单元格级联,所以需要循环加入 for(int i = 2;i<row;i++){ HSSFDataValidation valicounty = POIExcelUtil.setDataValidation("INDIRECT(G"+(i+1)+")", i, i, 7, 7); sheet.addValidationData(valicounty); }
所以,利用POI实现Excel下拉框的级联并不困难,只要我们明白Excel下拉框的实现原理,再用POI来实现其实很简单。
原创文章,转载请注明原作者及出处链接,谢谢!
http://blog.csdn.net/wed840313
相关文章推荐
- Java poi实现导出excel,添加数据有效性,生成模板
- 实现poi方式生成excel文件和web类根据路径生成java实例的反射技术的springmvc方法的方法
- 10、借助POI实现Java生成并打印excel报表(1)
- poi 实现 java生成excel
- 11、借助POI实现Java生成并打印excel报表(2)
- java-web-PIO实现自动生成excel录入模板(实现下拉列表框)[原创]
- 借助POI实现Java生成并打印报表(Excel)
- Java 操作 Excel (读取Excel2003 2007,Poi实现)
- java实现excel的导入导出(poi详解)
- java生成excel报表(poi)
- Java POI导出EXCEL经典实现 Java导出Excel弹出下载框
- Java使用poi生成Excel
- java利用poi包 为excel生成超链接
- Java利用POI生成Excel强制换行
- Java利用POI生成Excel强制换行
- java简单实现爬虫、jsoup实现网页抓取、POI实现数据导出Excel
- java使用poi实现大数据量导出为EXCEL
- Excel Report 一个小巧实用基于java实现的Excel报表生成工具
- java 导出excel到客户端(本地)例子 用poi和servlet实现的
- Java实现指定数据表导出生成Excel