汇总检查
概述
打开用户文件夹中的文件,在 Excel 文件中按需求搜索、筛选、统计。
🚨 经验教训(2026-06-17)
1. Sheet 名称映射问题
- 旧版 bug:极速脚本 v5 直接用
sheetN.xml文件名报告(如sheet1.xml),未解析真实 Sheet 名 - 根因:xlsx 的 sheet 编号不一定是顺序的。workbook.xml 通过
r:id引用 rels 文件中的映射:
workbook.xml: <sheet name="Tv" r:id="rId2"/>→rels: <Relationship Id="rId2" Target="worksheets/sheet2.xml"/> - 修复:v6 新增
load_sheet_names()函数,读取 workbook.xml + _rels 建立真实映射 - 验证方法:当用户怀疑 sheet 数据遗漏时,用以下脚本核实:
import zipfile, re
path = r"<xlsx文件路径>"
z = zipfile.ZipFile(path)
wb = z.read('xl/workbook.xml').decode()
rels = z.read('xl/_rels/workbook.xml.rels').decode()
rid_to_file = dict(re.findall(r'Id="(rId\d+)"[^"]*Target="([^"]+)"', rels))
for name, rid in re.findall(r'name="([^"]+)"[^"]*r:id="(rId\d+)"', wb):
print(f'{name} -> {rid_to_file.get(rid, "?")}')
z.close()
2. 多 Sheet 分别报告
- 当一个文件有多个 sheet 且都有数据时,报告必须按 sheet 分别列出数量和实际名称
- 统计汇总表中要同时展示 sheet 名称和对应数量
- 单 sheet 也要标注 sheet 名称,保持格式统一
3. 汇报必须包含所有公司的 Sheet 明细(2026-06-20)
- 教训:首次汇报 DATA_DISNEY 160 条时只给了总数,未展示 Film / Tv 分 Sheet 数据
- 根因:脚本输出长,终端截断导致 DISNEY 的 sheet 明细被吞掉,AI 直接报了汇总数
- 规则:汇报汇总检查结果时,每个公司必须按 Sheet 分别列出名称和数量,哪怕脚本输出被截断也要补跑确认
- 禁止:只报公司总数而不报 Sheet 拆分,用户看不到各 sheet 分别多少条就是失职
4. 共享字符串索引匹配
- xlsx 中单元格格式为
<c r="A1" t="s"><v>12345</v></c>,索引在<v>内 - 不能用
t="索引"匹配,必须用<v>索引</v>
5. 多候选列定位,取命中最多(2026-08-17)
- 教训:DATA_DISNEY 的 Film sheet 中 A 列(标题/合并单元格残留)也含 "FILE NAME" 字样,旧逻辑只取表头区域第一个匹配列,误把 A 列当数据列,真实数据在 E/F 列 → Film 被统计成 0 条
- 根因:单列定位策略在"表头含多个 FILE NAME 字样"的 sheet 上会选错列
- 修复:收集所有候选列 → 对每列分别统计命中数 → 取命中最多者为真实 FILE NAME 列;同时把表头扫描窗口扩大到 60000 字符
- 验证:修复后 Film 正确统计出 72 条(与 Excel 状态栏"计数"一致)
工作流程
🎯 触发词 "汇总检查" → 固定流程(无需确认)
当用户说"汇总检查"并提供文件夹路径时,不要问任何参数,直接执行:
# 步骤1: 安装依赖(静默)
$env:PYTHONIOENCODING="utf-8"; python3.12 -m pip install --break-system-packages openpyxl -q 2>&1
# 步骤2: 运行极速版筛选
$env:PYTHONIOENCODING="utf-8"
python3.12 <本技能目录>/scripts/filter_filename_fast.py --folder "<路径>" --suffix="-ZX" --date "<今天>"
固定参数:
- 操作:FILE NAME 列筛选统计
- 日期:当天
- 后缀:-ZX
- 脚本:极速版 v7(filter_filename_fast.py)
如果用户未提供文件夹路径,提醒一句:"哪个文件夹?给个路径。"
🔧 其他操作(用户明确要求时)
- 文件概览:
python3.12 <本技能目录>/scripts/batch_excel.py --folder "<路径>" --overview - 关键词搜索:
python3.12 <本技能目录>/scripts/batch_excel.py --folder "<路径>" --search "<关键词>" - 自定义日期/后缀:用户指定时覆盖默认值
功能:
1. 在每个文件中自动定位 "FILE NAME"(或 "Capture File Name")列
2. 筛选以指定日期开头的行
3. 再从中筛选以 -ZX 精确结尾的行
4. 按文件(公司)+ 真实 Sheet 名称分别统计数量并汇报
5. 单文件多 Sheet 时,每个 Sheet 分别统计、分别报告
常见 pandas 操作参考
import pandas as pd
df = pd.read_excel(r"<路径>", dtype=str)
df[df["列名"] == "值"] # 精确筛选
df[df["列名"].str.contains("关键词", na=False)] # 模糊筛选
df[(df["A"]=="X") & (df["B"].str.endswith("-ZX"))] # 多条件
df["列名"].value_counts() # 统计
df.groupby("列").size() # 分组计数
注意事项
- 默认使用极速版:FILE NAME 列筛选统计必须使用极速版脚本
filter_filename_fast.py(当前 v7),不用原版filter_filename.py - 编码:运行 Python 前必须设
$env:PYTHONIOENCODING="utf-8" - 多级表头/多候选列:FILE NAME 筛选脚本自动扫描前 10 行定位列名(支持 Row 3~4 表头),并收集所有匹配 "FILE NAME" 的候选列分别计数、取命中最多者为真实数据列——避免表头/标题行残留 "FILE NAME" 字样导致列定位错误(如 DISNEY Film sheet 曾因此漏统计)
- 后缀匹配:
endswith精确匹配末尾字符,不会把中间含ZX的数据误匹配 - 临时文件:自动跳过
~$开头的 Excel 锁文件 - Sheet 名:v6 起自动解析真实 Sheet 名(通过 workbook.xml + rels 映射)
- 多 Sheet 报告:报告中必须按 sheet 分别列出名称和数量,不可将不同 sheet 数据合并到一个 sheet 名下
- 用户追问时:如果用户怀疑某 sheet 数据遗漏,先用脚本确认 rId 映射,再逐 sheet 检查匹配数