excel去重清洗

Excel 表格去重清洗。自动去除多余空格、全角字符转半角、标准化手机号和身份证号、按关键列(姓名/手机号/编号)去重,并生成清洗报告 sheet。当用户上传含脏数据的 xlsx/csv 并要求"去重"、"清洗数据"、"数据标准化"、"处理表格里的重复行"时触发。

Install

openclaw skills install @dont4getme-2/excel

Excel 表格去重清洗

何时使用

当用户上传 Excel 表格(通讯录、花名册、客户名单、报名表等),并需要:

  • 去掉重复行(同一人/同一单被录了多次)
  • 清理脏数据:首尾空格、中间多余空格、全角数字/字母/标点
  • 标准化手机号(去 +86、去横杠空格)、身份证号(大写 X)
  • 输出干净表 + 清洗报告(改了什么、删了多少)

触发词:去重、清洗、数据标准化、重复行、脏数据、名单整理

核心流程

步骤 1: 确认输入

  • 源文件路径(xlsx)
  • 去重 key 列(默认自动识别:优先"手机号/工号/学号/身份证"列,其次"姓名"列;用户指定列名则用 --key
  • 重复保留策略(默认保留首条,--keep last 保留末条)

步骤 2: 运行脚本

bash
python scripts/dedup_clean.py "<源文件.xlsx>" [输出文件.xlsx] [--key "姓名,手机号"] [--keep first|last]

输出默认为 原名_cleaned.xlsx,包含两个 sheet:

  1. 清洗结果 — 蓝色表头、冻结首行、列宽自适应的干净表
  2. 清洗报告 — 原始行数、删除重复行数、清洗单元格数、key 列说明

步骤 3: 汇报结果

把脚本打印的统计信息转述给用户(原始行数 → 删除重复 → 剩余行数 + 清洗单元格数)。

清洗规则速查

规则说明
空白清理\s+ 合并为单个空格,去首尾;纯空格单元格置空
全角转半角123123AbcAbc-()-() 等 60+ 字符映射
手机号+86/空格/横杠,校验 1[3-9]\d{9}
身份证18 位校验,末位 x 统一大写
去重key 列值(忽略大小写和空格)完全一致视为重复

技术注意点

  1. 不要改原文件:始终输出新文件,原文件作为对照保留
  2. 数字型单元格跳过清洗isinstance(value, (int, float, bool)) 不做字符串处理,避免破坏数值精度(如身份证被科学计数法存储时先转文本列)
  3. 自动 key 识别失败时:表头没有常见列名 → 只做清洗不去重,并在报告注明
  4. 日期列易误伤:日期对象不动,只处理字符串