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;
|
|
/**
|
* 区域数据验证处理器
|
* <p>
|
* 用于为Excel导出模板中的区域列添加下拉选择功能
|
* </p>
|
*
|
* @author Chill
|
*/
|
public class DeptSheetWriteHandler implements SheetWriteHandler {
|
|
/**
|
* 区域名称列表
|
* <p>
|
* 这里需要根据实际情况从区域数据源获取
|
* </p>
|
*/
|
|
// 启用 禁用
|
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, 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);
|
}
|
|
|
}
|