java实现设置Excel下拉框

在使用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中。

 

posted @ 2022-09-22 19:56  啵啵ray  阅读(4510)  评论(0编辑  收藏  举报