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; /** * 区域数据验证处理器 *

* 用于为Excel导出模板中的区域列添加下拉选择功能 *

* * @author Chill */ public class RegionSheetWriteHandler implements SheetWriteHandler { /** * 区域名称列表 *

* 这里需要根据实际情况从区域数据源获取 *

*/ 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); } }