package com.linghu.handler; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import java.util.List; // 自定义下拉框处理器 public class SectionalizationDropdownHandler implements SheetWriteHandler { private List dropdownData; // 下拉选项数据 private int columnIndex; // 要添加下拉框的列索引(从0开始) public SectionalizationDropdownHandler(List dropdownData, int columnIndex) { this.dropdownData = dropdownData; this.columnIndex = columnIndex; } @Override public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { // sheet创建前不做处理 } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { Sheet sheet = writeSheetHolder.getSheet(); DataValidationHelper helper = sheet.getDataValidationHelper(); // 1. 设置下拉选项来源 String[] dropdownArray = dropdownData.toArray(new String[0]); DataValidationConstraint constraint = helper.createExplicitListConstraint(dropdownArray); // 2. 设置下拉框作用范围(从第2行到第1000行,第columnIndex列) // 注意:Excel行号从0开始,第0行为表头,数据行从1开始 CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, columnIndex, columnIndex); // 3. 创建数据验证并添加到sheet DataValidation validation = helper.createValidation(constraint, addressList); // 阻止输入非下拉选项的值 validation.setShowErrorBox(true); // validation.setErrorTitle("输入错误"); // validation.setErrorMessage("请从下拉列表中选择分组"); sheet.addValidationData(validation); } }