我们在使用excel进行批量导入的时候,通常会提供导入模板excel来给用户来规范用户的输入,其中就会用到下拉选项来约束这一种方式
方法一:@Excel
1 2
| @Excel(name = "状态", width = 25, replace = {"待审_1", "通过_2", "驳回_3"},addressList = true,orderNum = "25") private Integer status;
|
主要是replace和addressList这两个属性配置。
replace
:替换字段内容,通常用于状态字段的显示(例如:”男_1,女_2”)。
addressList
:是否生成下拉的选项。
@Excel
是 easypoi 中用于 Excel 导入导出的注解,可以用于实体类的字段上,用以定义该字段数据与 Excel 文件中的列的对应关系以及进行导入导出时的各种设置。以下是 @Excel
注解的一些主要属性和它们的功能:
name
:设置导出时在表格中的显示名称。
width
:列宽度,单位为字符。
height
:行高度,单位为字符。
orderNum
:导出排序顺序,数值小的先导出。
needMerge
:是否需要合并单元格。
mergeVertical
:纵向合并内容相同的单元格。
mergeRely
:合并依赖于某些列的情况。
replace
:替换字段内容,通常用于状态字段的显示(例如:”男_1,女_2”)。
suffix
:文本后缀,如%、元、个。
isImportField
:是否为导入字段,导入模板时是否需要显示。
exportType
:导出类型,指导出文本还是导出图片等类型。
format
:时间格式化,比如:”yyyy-MM-dd”。
databaseFormat
:数据库格式,通常配合 format
使用。
dict
:数据字典标识。
savePath
:图片等文件保存路径。
type
:字段类型(文本、图片、文件)。
imageType
:图片类型,控制导出图片的方式。
suffix
:文本类型的字段后缀标记。
statistics
:是否统计当前列,生成统计行。
方法二:DataValidation
由于有的时候我们的下拉列表选项来自数据库,可以使用dict属性搭配IExcelDictHandler,也可以直接在workbook上操作,把列表约束作用到指定单元格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public static void addDropdown(Workbook workbook,int firstRow, int col, String[] strings ){ Sheet sheet = workbook.getSheetAt(0); CellRangeAddressList cellRangeAddressList = new CellRangeAddressList(firstRow, 65535, col,col); DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint dvConstraint = helper.createExplicitListConstraint(strings); DataValidation validation = helper.createValidation(dvConstraint, cellRangeAddressList); sheet.addValidationData(validation); }
|
但是以上代码有个问题就是,如果下拉选项过多,会无法显示,这时候我们就需要借助一个隐藏的字典sheet,这时候我们就需要修改一下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| public static void addLongDropdown(Workbook workbook,int firstRow, int col, String[] strings ){ XSSFSheet sheet = (XSSFSheet)workbook.getSheetAt(0); int endRow =65535; String hiddenName = "hidden"+col; XSSFSheet hidden = (XSSFSheet)workbook.createSheet(hiddenName); for (int i = 0, length = strings.length; i < length; i++) { hidden.createRow(endRow + i).createCell(col).setCellValue(strings[i]); } Name workbookName = workbook.createName(); workbookName.setNameName(hiddenName); workbookName.setRefersToFormula(hiddenName + "!A1:A" + (strings.length + endRow)); DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = helper.createFormulaListConstraint(hiddenName); CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, col, col); DataValidation dataValidation = helper.createValidation(constraint, addressList); if (dataValidation instanceof XSSFDataValidation) { dataValidation.setSuppressDropDownArrow(true); dataValidation.setShowErrorBox(true); } else { dataValidation.setSuppressDropDownArrow(false); } sheet.addValidationData(dataValidation); workbook.setSheetHidden(workbook.getSheetIndex(hiddenName), true); }
|