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<String> dropdownData; // 下拉选项数据
|
private int columnIndex; // 要添加下拉框的列索引(从0开始)
|
|
public SectionalizationDropdownHandler(List<String> 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);
|
}
|
}
|