Excel中是怎么实现下拉框的级联

【实现思路】java

首先咱们来看一下Excel中是怎么实现下拉框的级联的:web

1. 假设咱们的Excel有两个sheet,第一个sheet须要有两个下拉框:地市、区县——其中区县做为地市的二级下拉框级联。下面是具体实现步骤:express

 

2. 首先咱们在“数据字典”这个sheet页中的B列为地市下拉框提供数据:app

 

3. 而后咱们继续在E列为区县的下拉框提供数据:(注意是全部的数据)ide

 

4. 下拉框数据准备好以后,咱们须要在名称管理器中建立所谓的“名称”:oop

地市下拉框建立名称:打开名称管理器,点击“新建”按钮,输入名称为“city”,引用的位置选择B列咱们为地市下拉框提供的数据:this

 

而后为区县下拉框建立名称:继续新建名称,名称起名为地市下拉框的第一个值“江苏”,引用的位置为E列中属于江苏的数据url

 

继续新建名称,名称起名为地市下拉框的第二个值“宿迁”,引用位置为E列中属于宿迁的数据spa

如此反复,直到全部的地市名称与它所对应的区县数据关联起来。.net

5. 回到第一个sheet页中,选中须要添加“地市”下拉框的单元格

点击“数据”选项卡中的“数据有效性”

容许一项中选择“序列”,来源中如图填写,与city名称关联起来

点击“肯定”,咱们能够看到地市的下拉框已经加上了:

6. 而后选中须要添加区县下拉框的单元格,点击“数据有效性”

容许一项选择“序列”,来源咱们输入“INDIRECT”,后面括号中填写级联的父级下拉框,即这一行中的地市名称那个单元格

点击肯定,级联工做至此完成

POI实现】

有了Excel的实现方式,咱们能够用一样的方式,在java后台生成这样的带有级联下拉框的EXCEL

咱们准备以下方法:

在名称管理器中建立名称的方法:

 

[java]   view plain copy
  1. /** 
  2.  * 建立名称 
  3.  * @param wb 
  4.  * @param name 
  5.  * @param expression 
  6.  * @return 
  7.  */  
  8. public static HSSFName createName(HSSFWorkbook wb, String name, String expression){  
  9.     HSSFName refer = wb.createName();  
  10.     refer.setRefersToFormula(expression);  
  11.     refer.setNameName(name);  
  12.     return refer;  
  13. }  

 

设置数据有效性的方法:

[java]   view plain copy
  1. /** 
  2.  * 设置数据有效性(经过名称管理器级联相关) 
  3.  * @param name 
  4.  * @param firstRow 
  5.  * @param endRow 
  6.  * @param firstCol 
  7.  * @param endCol 
  8.  * @return 
  9.  */  
  10. public static HSSFDataValidation setDataValidation(String name, int firstRow, int endRow, int firstCol, int endCol){  
  11.     //设置下拉列表的内容  
  12.     log.info("起始行:" + firstRow + "___起始列:" + firstCol + "___终止行:" + endRow + "___终止列:" + endCol);  
  13.     //加载下拉列表内容  
  14.     DVConstraint constraint = DVConstraint.createFormulaListConstraint(name);  
  15.     // 设置数据有效性加载在哪一个单元格上。  
  16.     // 四个参数分别是:起始行、终止行、起始列、终止列  
  17.     CellRangeAddressList regions = new CellRangeAddressList((short) firstRow, (short) endRow, (short) firstCol, (short) endCol);  
  18.     // 数据有效性对象  
  19.     HSSFDataValidation data_validation = new HSSFDataValidation(regions, constraint);  
  20.     return data_validation;  
  21. }  

 

有了这两个方法以后,咱们在程序中对全部数据都写入完成以后,进行以下操做:

 

[java]   view plain copy
  1. //为地市下拉框建立名称  
  2. POIExcelUtil.createName(wb, "city""数据字典!$B$2:$B$"+rowcity);  
  3. //为地市下拉框设置数据有效性  
  4. HSSFDataValidation valicity = POIExcelUtil.setDataValidation("city"2, row-166);  

 

[java]   view plain copy
  1. <span style="white-space:pre">  </span>//为区县下拉框建立名称  
  2.     POIExcelUtil.createName(wb, cityName, "数据字典!$E$"+tempcoun+":$E$"+rowcoun);  

 

 

[java]   view plain copy
  1. <span style="white-space:pre">  </span>//为区县下拉框设置数据有效性,因为区县的下拉框是根据本行的地市单元格级联,因此须要循环加入  
  2.     for(int i = 2;i<row;i++){  
  3.         HSSFDataValidation valicounty = POIExcelUtil.setDataValidation("INDIRECT(G"+(i+1)+")", i, i, 77);  
  4.         sheet.addValidationData(valicounty);  
  5.     }  


因此,利用POI实现Excel下拉框的级联并不困难,只要咱们明白Excel下拉框的实现原理,再用POI来实现其实很简单。

 

原创文章,转载请注明原做者及出处连接,谢

相关文章
相关标签/搜索