//生成Sheet1
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
//生成存放对应数据的辅助表单
Sheet sheet2 = wb.createSheet("Sheet2");
List
provNameList.add("安徽省");
provNameList.add("浙江省");
Map
List
childList.add("杭州市");
childList.add("宁波市");
siteMap.put("浙江省", childList);
List
list1.add("芜湖市");
list1.add("滁州市");
siteMap.put("安徽省", list1);
List
list2.add("戈江区");
list2.add("三山区");
siteMap.put("芜湖市", list2);
List
list3.add("来安县");
list3.add("凤阳县");
siteMap.put("滁州市", list3);
List
list4.add("上城区");
list4.add("下城区");
siteMap.put("杭州市", list4);
List
list5.add("余姚区");
list5.add("慈溪区");
siteMap.put("宁波市", list5);
int rowId = 0;
Row proviRow = sheet2.createRow(rowId++);
proviRow.createCell(0).setCellValue("省列表");
//在第一行添加省信息
for (int i = 1; i < provNameList.size(); i++)
{
Cell proviCell = proviRow.createCell(i);
proviCell.setCellValue(provNameList.get(i));
}
Iterator
//接下来每行都是第一个是父区域,后面跟着父区域的下一级子区域
while (keyIterator.hasNext())
{
String key = keyIterator.next();
List
Row row = sheet2.createRow(rowId++);
row.createCell(0).setCellValue(key);
for (int i = 0; i < son.size(); ++i)
{
Cell cell = row.createCell(i + 1);
cell.setCellValue(son.get(i));
}
}
//每一行都添加名称管理器
String range = getRange(1, rowId, son.size());
Name name = wb.createName();
name.setNameName(key);
String formula = "Sheet2!" + range;
name.setRefersToFormula(formula);
//添加省的规则
//设置下拉框的所选内容
DVConstraint provConstraint = DVConstraint.createExplicitListConstraint(provNameList.toArray(new String[]{}));
//设置下拉框的作用范围
CellRangeAddressList provRangeAddressList = new CellRangeAddressList(cell.getRowIndex()+1,10,cell.getColumnIndex(),cell.getColumnIndex());
DataValidation provinceDataValidation = new HSSFDataValidation(provRangeAddressList, provConstraint);
//设置下拉框的错误输入提示
provinceDataValidation.createErrorBox("error", "请选择正确省份");
//让该下拉框在该sheet页生效
sheet.addValidationData(provinceDataValidation);
//设置每一个单元格都以前一个单元格的选择作为标准
//用for循环控制行数
for (int j = 2; j <= 12; j++)
{
//市规则
//这里用到了excel中的公式和名称管理器,先是用INDIRECT方法取到第AD列第j行的数据,然后在到名称管理器中查找对应的list,然后赋值给下拉框;
DVConstraint formula = DVConstraint.createFormulaListConstraint("INDIRECT($AD$" + j + ")");
CellRangeAddressList rangeAddressList = new CellRangeAddressList(j-1, j-1,cell.getColumnIndex()+1,cell.getColumnIndex()+1);
DataValidation cacse = new HSSFDataValidation(rangeAddressList, formula);
cacse.createErrorBox("error", "请选择正确的城市");
sheet.addValidationData(cacse);
//区规则
formula = DVConstraint.createFormulaListConstraint("INDIRECT($AE$" + j + ")");
rangeAddressList = new CellRangeAddressList(j-1, j-1,cell.getColumnIndex()+2,cell.getColumnIndex()+2);
cacse = new HSSFDataValidation(rangeAddressList, formula);
cacse.createErrorBox("error", "请选择正确的区");
sheet.addValidationData(cacse);
}