一、导出 Excel 单元格设置下拉框

日常开发中,导出基础数据为模版,填充信息后导入时,有时候会要求某些导入项应该为下拉框选择,一个是为了规范数据,也可以简化填充。

1.1 单元格下拉框选项总字符较少的情况

单元格设置的下拉框字符总数小于 250,可以在当前 sheet 页直接设置单元格下拉框,可以单个或批量设置。

  public static void setDropDown(Sheet sheet,int startRow,int maxRow,int startColumn, int maxColumn){
for (int j=startColumn; j<maxColumn; j++){
String attr = sheet.getRow(0).getCell(j).getStringCellValue().trim();
if (IBALegalMap.containsKey(attr) && !("Classification").equals(attr)){
//存在下拉值,取出存在的下拉值,转化为 String 数组
List<String> list = IBALegalMap.get(attr);
String[] str = list.toArray(new String[list.size()]);
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
XSSFDataValidationConstraint dvConstraint =
(XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(str);
//设置起始行结束后,起始列结束列
CellRangeAddressList addressList = new CellRangeAddressList(startRow,maxRow,j,j);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
sheet.addValidationData(validation);
}
}
}

1.2 单元格下拉框选项总字符较多的情况

单元格设置的下拉框字符总数大于 250,这种情况直接设置后,表格会报错,可以通过隐藏 Sheet 页的方式进行设置。

每列下拉框都需要设置一个隐藏 Sheet 页,名称不可重复。

 public static void setDropDown(Sheet sheet,int startRow,int maxRow,int startColumn, int maxColumn,Workbook workbook,String hideName){
//Row row = sheet.getRow(startRow);
for (int j=startColumn;j<maxColumn;j++){
String attr = sheet.getRow(0).getCell(j).getStringCellValue().trim();
if (IBALegalMap.containsKey(attr) && (!"Classification".equals(attr))){
String s = Integer.toString(j);
hideName = hideName + s;
List<String> list = IBALegalMap.get(attr);
String[] str = list.toArray(new String[list.size()]);
logger.debug(str+"str");
//隐藏 sheet 页名称不可重复
Sheet hidden = workbook.createSheet(hideName);
Cell cell = null;
for (int i=0; i<str.length;i++){
String name = str[i];
Row strRow = hidden.createRow(i);
cell = strRow.createCell(0);
cell.setCellValue(name);
}
Name nameCell = workbook.createName();
nameCell.setNameName(hideName);
nameCell.setRefersToFormula(hideName+"!$A$1:$A$"+str.length);
//设置隐藏页
workbook.setSheetHidden(workbook.getSheetIndex(hidden),true);
DataValidationConstraint constraint = null;
//设置起始行结束后,起始列结束列
CellRangeAddressList addressList = new CellRangeAddressList(startRow,maxRow,j,j);
DataValidation validation = null;
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
constraint = dvHelper.createFormulaListConstraint(hideName);
//将数据添加进去
validation =dvHelper.createValidation(constraint,addressList);
sheet.addValidationData(validation);
logger.debug("设置下拉完成");
}
}


图 1.3 数据导出

 

最新文章

  1. Intellij Idea 15 下新建 Hibernate 项目以及如何添加配置
  2. URL特殊字符的转义
  3. golang exec Command
  4. Java学习-005-初学常用的几个经典循环控制源代码
  5. 更改OS序列号(slmgr)
  6. python基础:名称空间与作用域
  7. bzoj 1046 : [HAOI2007]上升序列 dp
  8. partial 的好处
  9. linux 下 查看是32位还是64位系统 命令
  10. oracle表空间自增长
  11. 03SpringMVC,Spring,Hibernate整合(Date时间转换)
  12. java的hashmap与hashtable说明,简单易理解
  13. springmvc中只接受固定提交内容类型的请求
  14. 露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准
  15. Java基础 -- 深入理解Java类型信息(Class对象)与反射机制
  16. Python菜鸟快乐游戏编程_pygame(1)
  17. nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket【转】
  18. jna调用c++的dll
  19. JPA+Hibernate 3.3 ——增删改查
  20. strace命令解析

热门文章

  1. MySQL 5.0版本的安装步骤
  2. 使用element上传图片的时候的限制只上传一个的问题
  3. 最简单明了的yield from解释
  4. PgBouncer连接池工具
  5. [2007年NOIP普及组] 纪念品分组
  6. Maven常用参数及其说明
  7. vue父子组件,子组件调用父组件方法
  8. 数据库MYSQL常用命令
  9. oracle表中增加字段sql
  10. Webpack解析与讲解