Back to skills
extension
Category: Data & AnalyticsNo API key required

Excel 数据验证助手

Excel 数据验证助手 — 用户提供 Excel 文件和各列的自然语言描述,自动生成验证 Schema,逐单元格校验,输出带 ❗error 标注的新 Excel 文件。触发词:数据验证、校验 Excel、validate data、按描述检查、校验数据列、根据规则验证。

personAuthor: user_7a685cbdhubcommunity

data-validator — Excel 数据验证助手

工作流程

  1. 接收用户输入:Excel 文件路径 + 各列的自然语言描述
  2. 读取 Excel:提取列名列表
  3. LLM 生成 Schema:将列描述转为结构化 JSON Schema
  4. 逐单元格验证:按 Schema 规则校验每个单元格
  5. 输出标注文件:生成新 Excel,错误单元格加红色背景 + 批注(❗error | 原因)

调用方式

在 Claude Code 中触发:

/data-validator

或者直接说:

  • "帮我验证这个 Excel"
  • "校验数据列"
  • "按描述检查数据"

交互流程

1. 收集信息

你需要向用户确认:

请提供以下信息:
1. Excel 文件路径
2. 各列的描述文本(自然语言即可,如:
   "学号:必填,8位数字
    姓名:必填,中文
    年龄:选填,0-150 的整数
    邮箱:选填,邮箱格式
    性别:必填,男或女
    成绩:选填,0-100 的数字")

2. 生成 Schema

读取 Excel 获取列名。用 LLM 将用户描述转为 JSON Schema,格式:

{
  "学号": { "type": "string", "required": true, "pattern": "^\\\\d{8}$", "description": "学号:必填,8位数字" },
  "姓名": { "type": "string", "required": true, "description": "姓名:必填,中文" },
  "年龄": { "type": "integer", "required": false, "min": 0, "max": 150 },
  "邮箱": { "type": "string", "required": false, "format": "email" },
  "性别": { "type": "enum", "required": true, "values": ["男", "女"] },
  "成绩": { "type": "number", "required": false, "min": 0, "max": 100 }
}

支持的数据类型:

| type | 说明 | 可选参数 | |------|------|----------| | string | 字符串 | pattern, format(email/url 兼容旧版) | | integer | 整数(正则匹配,支持负数) | min, max | | number | 浮点数(正则匹配,支持负数) | min, max | | boolean | 布尔值(是/否/true/false) | — | | enum | 枚举单选 | values(必填) | | date | 日期 YYYY-MM-DDYYYY-M-D | — | | year | 4位年份 | — | | email | 邮箱格式 | — | | url | URL 格式(http/https) | — | | multipleChoice | 枚举多选(逗号分隔) | values(必填) |

所有字段都支持 required: true/false

3. 执行验证

  1. 将 Schema 写入临时 JSON 文件(如 validate_schema.json
  2. 运行验证脚本(路径相对于 SKILL.md 所在目录):
    python scripts/validate_data.py <input.xlsx> validate_schema.json [output.xlsx]
    
  3. 读取输出,把结果呈现给用户

4. 输出结果

告诉用户:

  • 总检查了多少单元格
  • 发现多少错误
  • 输出文件路径

注意事项

  • 依赖 openpyxl,如未安装先运行 pip install openpyxl>=3.1.0
  • 只处理 .xlsx 格式,不支持 .xls
  • 第一行必须是表头
  • 生成的是新文件,不会覆盖原文件
  • 列名匹配是精确匹配(去掉首尾空格后比较)