在使用Excel的时候用到了下拉框,实现的效果如下↓
在生成excel文件时,需要根据给出的下拉框选项列表动态生成下拉框。实现代码如下:
private void createSelect(XSSFWorkbook workbook, DataValidationHelper helper, XSSFSheet targetSheet, List 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中。
Original: https://www.cnblogs.com/boboray/p/16720701.html
Author: 啵啵ray
Title: java实现设置Excel下拉框
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/569095/
转载文章受原作者版权保护。转载请注明原作者出处!