吉安感知网项目-后端
linwei
2026-01-30 31c36c337300ffc56f1a3eebd2dd19340dbd3fd5
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package org.sxkj.system.util.excel;
 
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.ArrayList;
import java.util.List;
 
/**
 * 区域数据验证处理器
 * <p>
 * 用于为Excel导出模板中的区域列添加下拉选择功能
 * </p>
 *
 * @author Chill
 */
public class RegionSheetWriteHandler implements SheetWriteHandler {
 
    /**
     * 区域名称列表
     * <p>
     * 这里需要根据实际情况从区域数据源获取
     * </p>
     */
 
    private static final String[] REGION_NAMES = { "市级", "区县级", "街道级" };
    // 启用 禁用
    private static final String[] ENABLE_DISABLE = { "启用", "禁用" };
 
    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        // 工作表创建前的操作,暂时不需要
    }
 
    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
        Workbook workbook = writeWorkbookHolder.getWorkbook();
        Sheet sheet = writeSheetHolder.getSheet();
 
        // 为区域列添加下拉选择
        // 假设区域列是第3列(索引为1),从第2行开始(索引为1)
        addRegionValidation(workbook, sheet, 3, 1, 1000, REGION_NAMES);
        addRegionValidation(workbook, sheet, 5, 1, 1000, ENABLE_DISABLE);
    }
 
    /**
     * 为区域列添加数据验证,设置下拉选择
     *
     * @param workbook 工作簿
     * @param sheet    工作表
     * @param column   列索引
     * @param startRow 开始行索引
     * @param endRow   结束行索引
     */
    private void addRegionValidation(Workbook workbook, Sheet sheet, int column, int startRow, int endRow, String[] regionNames) {
        // 创建数据验证助手
        DataValidationHelper helper = sheet.getDataValidationHelper();
 
        // 创建下拉列表约束
        DataValidationConstraint constraint = helper.createExplicitListConstraint(regionNames);
 
        // 创建数据验证区域
        CellRangeAddressList addressList = new CellRangeAddressList(startRow, endRow, column, column);
 
        // 创建数据验证
        DataValidation validation = helper.createValidation(constraint, addressList);
 
        // 设置验证错误提示
        validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
        validation.setShowErrorBox(true);
        validation.setSuppressDropDownArrow(true);
        validation.createErrorBox("输入错误", "请从下拉列表中选择区域名称");
 
        // 添加数据验证到工作表
        sheet.addValidationData(validation);
    }
 
 
}