Excel 智能筛选
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_8f803df1/excel-filter。
技能介绍
要解决的问题
把一份几万行的 Excel 筛到只剩符合条件的记录,不是点一下「筛选」按钮那么简单。用 openpyxl 逐格判断条件,速度会掉到不可接受;用 Excel 界面手动筛完再删行,删除动作常常连带破坏单元格格式、条件格式甚至图表引用。xlsx 本质是 zip 包裹的 XML,直接改 sheet XML 可以格式无损地删行,但删完后行号不连续,Excel 打开会看到满屏空白行,后续还得再处理。
核心能力:两种模式,一条流水线
技能提供两种删除语义:keep(默认,保留符合条件的行、删掉其余)和 remove(删掉符合条件的行、保留其余)。条件支持大于、等于、包含、多词「或」包含、区间比较,也能组合多个条件做 AND / OR。自然语言会先被翻译成 pandas 表达式,比如「申请日大于2020年」转成 df[col] > '2020-01-01',「申请人包含华为或腾讯」转成 df[col].str.contains('华为|腾讯', na=False)。
整个流程遵循四步法:
- 需求解析:识别条件类型,确认 keep 还是 remove,字段不清楚时分步索要
- 勘察:确认表头行数(单行还是多行表头)与实际列结构
- 执行:pandas 负责筛选计算,命中删除目标的行由 XML 直接删除,不走 openpyxl 整表写回
- 验证:核对剩余行数与条件结果
为什么这么拆
pandas 的字符串与日期比较比 openpyxl 逐格判断快几个数量级,所以筛选逻辑全部交给它;删除动作走 XML 直改,因为 openpyxl 的重写会丢样式,而 XML 操作可以保留原有格式且快约 10 倍。
注意点
- 删除后必须询问:XML 删行后行号不连续,Excel 打开会显示空白行,需确认是否执行压实(行号重新连续编号、同步更新公式引用)
- 操作前自动备份:时间戳命名,成功后保留最新 3 份,出问题立即回滚
- 日期列:Excel 原生 datetime 列要用
pd.Timestamp('2020-01-01')比较 - 空值语义:
isna()匹配None/NaN,不会匹配空字符串,后者要用df[col] == '' - 多行表头、合并单元格等结构必须先勘察确认,不能假设第 1 行就是表头
使用场景
- 专利审查数据中,用自然语言把申请日大于2020年且状态为授权的记录筛出来,只保留符合条件的行。
- 市场团队收集的用户授权名单里,把空白或无效的数据行删除,同时保留其他有效记录。
- 财务报表中日期列以 Excel 日期格式存储,需要把申请日在2020到2023年之间的行筛出来并压实行号。
适合人员
- 每周处理专利数据库导出的分析师,需要根据申请日和法律状态快速筛出符合条件的案件。
- 负责清洗用户授权数据的运营,需要在表格中批量删除空白或无效记录。
- 财务或法务团队中需要处理日期范围筛选并保持表格格式的人员,需要在筛选后压实行号。