Skip to content

D 数据验证

guanquan.wang edited this page Oct 28, 2025 · 1 revision

使用数据验证来限制用户输入单元格(如下拉列表)的数据类型或值。EEC使用扩展参数来支持Validation,当前支持整数(WholeValidation),小数(DecimalValidation),列表(ListValidation),日期(TimeValidation),时间(DateValidation)和文本长度(TextLengthValidation)6种数据验证

下面示例代码限制第1列只能选择性别枚举,第2列只能输入大于0的数字,第3列只能输入2025年内的日期

List<Validation> validations = new ArrayList<>();
// 下拉框选择“未知”,“男”,“女”
validations.add(new ListValidation<>().in("未知", "男", "女").dimension(Dimension.of("A2:")));
// 只能输入大于0的数
validations.add(new WholeValidation().greaterThan(0L).dimension(Dimension.of("B2:")).prompt("只能输入>0的数"));
// 限制日期在2025年
validations.add(new DateValidation().between("2025-01-01", "2025-12-31").dimension(Dimension.of("C2:")).prompt("只能输入\"2025-01-01\"~\"2025-12-31\"之间的日期"));

new Workbook()
    .addSheet(new SimpleSheet<>(Collections.singletonList(Arrays.asList("姓别", "年龄", "日期")))
        .putExtProp(Const.ExtendPropertyKey.DATA_VALIDATION, validations))
    .writeTo(Paths.("F:/excel/普查登录表.xlsx"));

效果:

validation

参数说明

必选参数

  • 设置数据
  • dimension指定作用域,作用域只能是单行或单列,不能是多行多列。

可选参数

  • promptTitle、prompt指定提示词,选中某个单元格时会显示提示词,可以给用户必要的提示
  • errorTitle、error指定错误消息,当用户输入与数据限制不一致时弹出错误信息
  • errorStyle错误警报样式,stop(默认):提供"取消/重试"选项,必须修改正确才能离开单元格,warning:提供"是/否"选项,information:只提供"确定"按钮

级联列表

v0.5.27开始EEC支持级联下拉(最多5级联动),在普通的ListValidation对象中使用addCascadeList添加关联子选项,数据格式为Map,Key为父级选型,Value为对应的子选型,关联子项的Key不允许重复且关联项必须与父项相邻

List<Validation> validations = new ArrayList<>();
validations.add(ListValidation.in(Dimension.of("A2:"), Arrays.asList("A省", "B省", "D省"))
    .addCascadeList(Dimension.of("B2:"), new HashMap<String, List<String>>(){{
        put("A省", Arrays.asList("A1市", "A2市", "A3市"));
        put("B省", Arrays.asList("B1市", "B2市", "B3市", "B4市"));
        put("D省", Arrays.asList("D1市", "D2市"));
    }})
    .addCascadeList(Dimension.of("C2:"), new HashMap<String, List<String>>(){{
        put("A1市", Arrays.asList("A1市_1", "A1市_2", "A1市_3"));
        put("A2市", Arrays.asList("A2市_1", "A2市_2", "A2市_3", "A2市_4", "A2市_5"));
        put("A3市", Arrays.asList("A3区_1", "A3区_2"));
        put("B1市", Arrays.asList("B1市_1", "B1市_2"));
        put("B2市", Arrays.asList("B2市_1", "B2市_2", "B2市_3"));
        put("B3市", Arrays.asList("B3市_1", "B3市_2", "B3市_3", "B3市_4"));
        put("B4市", Arrays.asList("B4市_1", "B4市_2"));
        put("D1市", Arrays.asList("D1市_1", "D1市_2"));
        put("D2市", Arrays.asList("D2市_1", "D2市_2", "D2市_3", "D2市_4"));
    }}));
    
new Workbook()
    .addSheet(new SimpleSheet<>(Collections.singletonList(Arrays.asList("省份", "市区", "市镇")))
        .putExtProp(Const.ExtendPropertyKey.DATA_VALIDATION, validations))
    .writeTo(Paths.get("F:/excel/级联列表.xlsx"));

级联下拉

Cascade List

Clone this wiki locally