浏览 AI 知识库
Python 批量处理 Excel:保留原文件并生成差异报告
用 Python 批量清洗 Excel 时,原文件、公式、日期和异常行都要保留证据。输出一份新文件和差异报告,比直接覆盖“整理干净”更重要。
按实际操作顺序推进
每完成一段就检查当前输出,确认结果符合预期后再继续。
表格看起来整齐了,公式和异常日期却一起丢了
Python 脚本清洗 Excel 时直接覆盖原文件,公式变成值,两个无法解析的日期被改成空白。结果看似整齐,却无法追责。
- 原文件哈希未变
- 差异报告覆盖所有变更
- 异常行未静默丢失
动手前,把材料和不能改的部分定下来
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | `orders.xlsx` 含 3 个工作表、公式、合并单元格与 860 行数据;目标只规范日期和渠道名称。 |
| 不能越过的边界 | 原文件只读,输出新文件;公式与样式变化单列;异常行保留原值、原因和行号。 |
| 要交付的结果 | 新文件、差异报告与异常行 |
Python 批量处理 Excel,从“读取时保护类型”开始做
读取时保护类型
明确编码、分隔符、工作表、标题行和容易丢失前导零的字段,先输出行列和样例。
规则数据化
每条清洗规则写字段、条件、动作、优先级和异常处理,不把口径散在代码分支里。
保留原值和行标识
为修改字段新增规范值列,保留源文件行号或主键,无法判断的行进入异常表。
小样本与边界验证
测试空值、中文、日期、金额、科学计数、重复和极端长度,比较手工预期。
输出可重算交付
生成新文件、规则版本、修改计数、逐行差异和异常清单,重跑相同输入结果一致。
保留原值和行号,再生成规范值与异常表
| 原始输入 | 规则 | 输出 | 异常 |
|---|---|---|---|
| 订单号 00123 | 按字符串读取,保留前导零 | 规范订单号 00123 | 不能变成 123 |
| 日期 2026/9/1 | 统一为 ISO 日期 | 2026-09-01 | 无法解析进入异常表 |
| 金额 ¥1,299.00 | 去货币符号,保留两位小数 | 1299.00 | 负号/空值单独标记 |
| 重复订单行 | 按主键和时间判定 | 保留原行并标记重复 | 不自动删除 |
字段和规则为演示;真实清洗需由业务负责人确认口径。
完成后的新文件、差异报告与异常行
脚本生成 `orders_cleaned.xlsx` 和 `orders_diff.csv`。修改 114 个渠道值、转换 812 个日期,2 个歧义日期保留原值并标异常;公式数量与源文件一致,原文件哈希未变。
为什么“数据行数一致,工作簿仍可能损坏”还不能交付
数据行数一致,工作簿仍可能损坏
- 原因
- 只比较单元格值,遗漏公式、工作表和格式
- 怎么改
- 检查 sheet、行列、公式计数、关键样式与重开结果
