Excel数据清洗与报表自动化引擎·专业版
能力
自动生成数据清洗步骤清单、公式建议与三项校验规则。
输入
| 参数 | 说明 |
|---|---|
| 问题类型 | 重复/空值/格式/乱码/超链接(可多选,数组或字符串) |
| 数据行数 | 当前表行数(0=空表提示) |
| 字段数 | 列数(0=提示核对导入) |
| 目标报表 | 报表名,如「对账报表」 |
输出
- steps:清洗步骤清单(动作+规则)
- check_rules:三项校验规则
- formula_hints:Excel 公式建议
- report_type:目标报表名
处理规则(按问题类型)
- 重复 → 删除重复值保留首条;主键列判定唯一;COUNTIF 检测公式
- 空值 → 数值列填0并旁注;文本列填「待补」;关键列整行删除;空值率>30%查来源
- 格式 → 日期统一 YYYY-MM-DD(TEXT);金额两位小数(ROUND)
- 乱码 → TRIM(CLEAN()) 清理控制符;仍乱码核对源文件编码
- 超链接 → 复制-选择性粘贴-数值;或提取纯文本
硬规则
- 行数=0 或 字段数=0 → 返回「数据为空/字段为0」提示,不硬算
- 问题类型非法项自动忽略;空列表给基础巡检
- 不编造具体业务口径与数据来源
内嵌引擎代码(可运行)
_KNOWN = {"重复","空值","格式","乱码","超链接"}
def clean(issues, rows, fields, report_type="对账报表"):
rows = max(0, int(rows)); fields = max(0, int(fields))
rt = report_type.strip() or "对账报表"
if isinstance(issues, str): issues = [issues]
issues = [i for i in issues if i in _KNOWN]
if rows == 0 or fields == 0:
return {"steps": ["数据为空或字段数为 0,先核对源文件导入,再执行清洗"],
"check_rules": ["导入条数核对(源表 vs 当前表)"],
"formula_hints": [], "report_type": rt}
steps, fh = [], []
for iss in issues:
if iss == "重复":
steps.append("去重:数据-删除重复值,保留首条;以主键列判定唯一")
fh.append('=IF(COUNTIF($A$2:A2,A2)>1,"重复","")')
if iss == "空值":
steps.append("空值:数值列填0并旁注;文本列填「待补」;关键列空值整行删除")
fh.append("=COUNTBLANK(A2:A100)")
if iss == "格式":
steps.append("格式统一:日期 YYYY-MM-DD;金额两位小数;文本去空格")
fh.append('=TEXT(A2,"YYYY-MM-DD");=ROUND(B2,2)')
if iss == "乱码":
steps.append("乱码:TRIM(CLEAN()) 清理控制符;仍乱码核对源文件编码后重导")
fh.append("=TRIM(CLEAN(A2))")
if iss == "超链接":
steps.append("超链接:复制-选择性粘贴-数值,保留文本")
fh.append("=A2 取纯文本")
if not steps:
steps.append("未识别问题类型,执行基础巡检:条数/合计/主键唯一性三项")
return {"steps": steps,
"check_rules": ["条数核对:清洗后与源表一致,记录删除行数",
"合计核对:金额 SUM 与原台账差异率≤0.5%",
"唯一键检查:主键列 COUNTIF 无重复",
f"报表输出:{rt} 生成前先跑以上三项"],
"formula_hints": fh, "report_type": rt}
断言实测(发布前本地实跑)
- 正例1:重复·10000行·10字段 → 去重+COUNTIF ✅
- 正例2:空值+格式·5000行·8字段 → 双处理+ROUND ✅
- 正例3:乱码+超链接·2000行·6字段 → 双处理 ✅
- 边界:0行/空列表/字段0/字符串入参 ✅
- 合计 12 项断言全过