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來實現其實很簡單。

 

原創文章,轉載請註明原做者及出處連接,謝

相關文章
相關標籤/搜索