Loading...
Loading...
Excel配置检查工具,用于验证Excel文件数据是否符合YAML规则定义。使用场景:当用户提出“检查配置”“验证Excel”“检查规则”“执行检查”“验证数据”等需求时;当用户需要更新规则文件、修改验证规则、添加新的检查规则时;当用户询问如何配置规则、如何实现某类验证、如何使用算子时;该工具可覆盖Excel数据验证、字段关联检查、跨表引用验证、格式校验等需求。重要约束:若需求无法通过现有规则实现,必须列出原因。禁止修改validate.py或src/目录下的检测脚本。无法通过规则实现的情况包括:需要新增算子类型、需要修改核心引擎逻辑、需要自定义代码逻辑等。
npx skill4agent add xxxcoffee/shareskills e-checker# 基础用法(默认查找checker_rules.yaml)
python validate.py
# 指定规则文件
python validate.py rules.yaml
# 显示详细信息
python validate.py rules.yaml -v
# 列出所有算子
python validate.py --list-operatorsversion: "3.0"
# 定义外部数据源(可选)
refs:
product_ref:
file: "reference.xlsx"
sheet: "ProductInfo"
columns:
id: "A"
type: "D"
level: "F"
# 验证规则
rules:
- target: "file.xlsx:Sheet.range"
id: "unique rule identifier"
description: "rule description"
validations:
- pipeline:
- operator1: configuration
- operator2: configuration
message: "error message when validation fails"# 完整格式
- target: "data.xlsx:Sheet1.H5:*"
# 简化格式(自动追加.xlsx)
- target: "data:Sheet2.A5:*"
# 带括号的工作表名称
- target: "reference.xlsx:Product(Data).A5:*"| 算子 | 配置 | 描述 |
|---|---|---|
| | 从指定列获取源值 |
| | 将当前结果保存到变量 |
| | 使用变量作为输入 |
| 算子 | 配置 | 描述 |
|---|---|---|
| `" | "` |
| | 提取复合值的部分内容 |
| | 过滤数组元素 |
| | 列表映射操作 |
| - | 扁平化嵌套列表 |
| | 切片获取子集 |
| - | 去除空白字符 |
| - | 转换为数字 |
| - | 计数 |
| | 去除重复项 |
| | 数学运算 |
| | 四舍五入到指定小数位数 |
| - | 向下取整 |
| - | 向上取整 |
| 算子 | 配置 | 描述 |
|---|---|---|
| | 跨表查找 |
| | 条件过滤 |
| | 获取属性 |
| | 获取工作表行数 |
| | 验证工作表是否存在 |
| 算子 | 配置 | 描述 |
|---|---|---|
| | 集合求并集 |
| | 集合求交集 |
| 算子 | 配置 | 描述 |
|---|---|---|
| | 收集数据(跨行) |
| | 连续性验证 |
| | 跨行引用验证 |
| 算子 | 配置 | 描述 |
|---|---|---|
| | 相等验证 |
| | 小于 / 小于等于 |
| | 大于 / 大于等于 |
| | 不等于 |
| | 验证所有条件均满足 |
| | 布尔一致性验证 |
| | 包含性验证 |
| | 存在性验证 |
| | 结构验证 |
| | 范围检查 |
| 语法 | 描述 | 示例 |
|---|---|---|
| 当前单元格值 | |
| 同行X列的值 | |
| 流水线变量 | |
${...}- eq: "${@row.A + @row.B * 2}" # 数学运算
- eq: "${len(@var)}" # 函数调用
- eq: "${max(@row.A, @row.B, 100)}" # 多参数函数rules:
- target: "data.xlsx:Sheet1.A1:*"
id: "check_item_format"
validations:
- pipeline:
- split: "|"
- extract:
delimiter: ":"
index: 0
- match_structure:
type: "regex"
pattern: "^(ItemA|ItemB|Category)"
mode: "each"
message: "Product name must be ItemA, ItemB or start with Category"
message: "格式不正确"rules:
- target: "data.xlsx:Sheet1.A1:*"
id: "check_exists"
validations:
- pipeline:
- exists_in: "ref_data.id"
message: "ID在参考表中不存在"rules:
- target: "data.xlsx:Sheet1.B1:*"
id: "check_range"
validations:
- pipeline:
- to_number
- range_check:
min: 0
max: 100
message: "值必须在0到100之间"rules:
- target: "data.xlsx:Sheet1.C1:*"
id: "check_length"
validations:
- pipeline:
- split: "|"
- count
- eq: "${@row.D}" # 等于D列的值
message: "数组长度不匹配"rules:
- target: "data.xlsx:Sheet1.A1:*"
id: "check_sequential"
validations:
- pipeline:
- collect: "ids"
- sequential:
prefix: "item"
start_from: 1
message: "ID必须按顺序递增"checker_rules.yamlpython validate.py [规则文件] [-v]scripts/validate.pyscripts/src/python scripts/validate.py