【實現思路】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
咱們準備以下方法:
在名稱管理器中建立名稱的方法:
-
-
-
-
-
-
-
- public static HSSFName createName(HSSFWorkbook wb, String name, String expression){
- HSSFName refer = wb.createName();
- refer.setRefersToFormula(expression);
- refer.setNameName(name);
- return refer;
- }
設置數據有效性的方法:
-
-
-
-
-
-
-
-
-
- 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);
- <span style="white-space:pre"> </span>
- POIExcelUtil.createName(wb, cityName, "數據字典!$E$"+tempcoun+":$E$"+rowcoun);
- <span style="white-space:pre"> </span>
- 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來實現其實很簡單。
原創文章,轉載請註明原做者及出處連接,謝