huliguo
1 天以前 580d70b15ae47bc180a0b579af8c47c506eefac6
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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);
    }
}