首页 > 编程语言 >java实现设置Excel下拉框

java实现设置Excel下拉框

时间:2022-09-22 20:14:38浏览次数:53  
标签:java hiddenSheet selectList Excel hiddenName workbook sheet 下拉框

在使用Excel的时候用到了下拉框,实现的效果如下↓

 

 

 在生成excel文件时,需要根据给出的下拉框选项列表动态生成下拉框。实现代码如下:

private void createSelect(XSSFWorkbook workbook, DataValidationHelper helper, XSSFSheet targetSheet, List<String> selectList, int column, int fromRow, int endRow) {
     // workbook表示当前excel文件,targetSheet表示要加下拉框的sheet,selectList表示下拉框选项列表;column表示下拉框所在的列;fromRow表示下拉框开始行,endRow表示下拉框结束行
    // helper是 DataValidationHelper helper = sheet.getDataValidationHelper()
try {
            // hiddenSheet不存在的时候创建 存在的时候修改
            // 创建一个隐藏的sheet,存放下拉框选项
            String hiddenName = "hiddenSelect" + column;
            Sheet hiddenSheet = null;
            Cell cell = null;
            if (workbook.getSheet(hiddenName) == null) {
                hiddenSheet = workbook.createSheet(hiddenName);
                // 把下拉框列表数据放进隐藏sheet
                for (int i = 0; i < selectList.size(); i++) {
                    Row row = hiddenSheet.createRow(i);
                    cell = row.createCell(0);
                    cell.setCellValue(selectList.get(i));
                }
            } else {
                hiddenSheet = workbook.getSheet(hiddenName);
                // 把下拉框列表数据更新至隐藏sheet
                for (int i = 0; i < selectList.size(); i++) {
                    Row row = hiddenSheet.getRow(i);
                    cell = row.getCell(0);
                    cell.setCellValue(selectList.get(i));
                }
            }
            // 名称管理器 存在的时候修改 不存在的时候新增
            Name nameCell = null;
            if (workbook.getName(hiddenName) == null) {
                nameCell = workbook.createName();
                nameCell.setNameName(hiddenName);
            } else {
                nameCell = workbook.getName(hiddenName);
            }
            // 设置名称管理器的范围
            nameCell.setRefersToFormula(hiddenName + "!$A$1:$A$" + selectList.size());
            // 隐藏sheet
            workbook.setSheetHidden(workbook.getSheetIndex(hiddenSheet), true);
            // 设置下拉框作用范围
            CellRangeAddressList addressList = new CellRangeAddressList(fromRow, endRow, column, column);
            DataValidationConstraint constraint = null;
            DataValidation validation = null;
            constraint = helper.createFormulaListConstraint(hiddenSheet.getSheetName());
            validation = helper.createValidation(constraint, addressList);
            // 数据校验
            validation.setSuppressDropDownArrow(true);
            validation.setShowErrorBox(true);
            targetSheet.addValidationData(validation);
        } catch (Exception e) {
            logger.error("<<<<<<< create template error cause {}", e);
        }
}

 

在下拉框选项比较少的时候可以直接设置下拉框选项,在下拉框数据较多的时候需要在一个新的sheet加入下拉框数据,然后隐藏该sheet。为了方便,此处都是把下拉框数据加入到了隐藏sheet中。

 

标签:java,hiddenSheet,selectList,Excel,hiddenName,workbook,sheet,下拉框
From: https://www.cnblogs.com/boboray/p/16720701.html

相关文章

  • JavaScript 静态方法
    静态方法:static关键字(类方法),可在实例化对象之前通过类名.方法名调用静态方法静态方法不能在对象上调用,只能在类中调用如果想在noob中使用静态方法,可以作为一个参数传递......
  • JAVA调用远程接口时模拟发送数据-json格式、x-www-form-urlencoded格式、文件+参数格
    实习期结束,总结一下实习时遇到的一些以前不常用的代码,以方便下次用到时取用,代码不涉及公司机密,需要根据自己的需要进行一定的修改!如有错误欢迎指正!一个需求是项目的某些接......
  • JavaScript 类继承
    使用extends关键字。super() 方法用于调用父类的构造函数。已有的类称为基类(父类),新建的类称为派生类(子类)。通过在构造方法中调用 super() 方法,我们调用了父类的构......
  • Java使用HttpClient免证书去调用https的方案
    一、依赖引入<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.7</version></dependency>......
  • 【逻辑】【java基础】查询逻辑 分页查询【实用】
    控制层:逻辑业务层:  数据层: 封装类: ......
  • java进程导致CPU100%分析
    背景最近负责的一个项目上线,运行一段时间后发现对应的进程竟然占用了100%的CPU,导致公司的物理服务器都不堪重负,频繁宕机。那么,针对这类java进程CPU飙升的问题,我们一般要......
  • JavaScript 类(class)
    使用class关键字关键一个类,每个类中包含了一个特殊的方法 constructor(),它是类的构造函数创建类classClassName{constructor(name,url){this.name=name;this,url=u......
  • cannot be cast to java.util.Map
    特别记一下,对象的字段,首字母小写!!!代码:@OverridepublicList<MODEL_Vo>find(Stringstr){Stringsql="select*fromtab";Queryquery=em.......
  • Java流程控制02(Scanner进阶)
    Scanner进阶使用判断输入的是否为整数:packageScanner;importjava.util.Scanner;publicclassDemo03{publicstaticvoidmain(String[]args){S......
  • java8 list集合更具对象属性去重处理
    话不多说直接上代码 packagecom.leinuo.jvm.list;importjava.util.*;importjava.util.concurrent.ConcurrentHashMap;importjava.util.function.Function;imp......