2026-10-08 · 喵窝资源铺
前两篇《值班表×请假单跨表核对》和《审批状态过滤版》都假设了一个前提:值班表和请假单在同一个月份里。现实里月底必炸——10 月 31 号的夜班在表里写「延续至 11-01 02:00」,可 11 月的表 11-01 那行写的是接班的王五;员工请了 10-19 到 11-03 的长假,横跨两张值班表;文件夹里还躺着上个月没删干净的老表。这版把两张月度值班表合并后统一逐日核对,专治这三种情况。代码实跑验证,真实输出贴在下面。
测试数据:10 月值班表 9 行、11 月值班表 6 行,故意埋了这些陷阱——李四 10-31「夜班(延续至11-01 02:00)」(跨月班)、一条 11-31 的假日期(不存在的日期)、一条空日期脏行;请假单 5 条:李四 11-01~11-02(撞李四自己的延续班)、张三 10-19~11-03(跨月长假)、赵六 10-28~11-06(跨月)、钱七 10-12~10-18(无冲突对照组)、孙八起止填反。跑完:
值班: 10月8条/11月5条(异常2) 请假5条(脏0) 冲突4 冲突: 李四 请假2026-11-01~2026-11-02 撞值班日 2026-11-01 班次[['夜班(延续至11-01 02:00)(跨月延续)']] → 需代班 冲突: 张三 请假2026-10-19~2026-11-03 撞值班日 2026-11-02 班次[['白班']] → 需代班 冲突: 赵六 请假2026-10-28~2026-11-06 撞值班日 2026-11-05 班次[['夜班']] → 需代班 冲突: 孙八 请假2026-10-31~2026-11-30 撞值班日 2026-11-15 班次[['夜班']] → 需代班
逐项验收:李四的假撞上的正是他自己 10-31 那班延续到 11-01 的夜班——脚本从班次文字里抓出「延续至 11-01」,把这班补记到 11 月那边,换表不丢;张三 16 天的跨月长假没有因为「值班表换文件了」漏掉 11-02 的白班;钱七无冲突不误报;孙八起止填反自动纠正后照常撞出 11-15。异常表里躺着 2 行:日期2026-09-28不属于本表月份10月 风格的跨月混入标疑 + 11-31 假日期 + 空日期脏行。幂等验证:连跑两次输出内容 md5 完全一致。
| 坑 | 错误做法 | 这版的做法 |
|---|---|---|
| 月末夜班延续到下月 | 只看本表,延续的那几个小时没人管 | 正则抓班次里的「延续至 MM-DD」,把这班补记到下月那天(下月那天已有本人班则不重复记) |
| 请假区间横跨两个月 | 分别拿 10 月请假撞 10 月值班表、11 月撞 11 月表——写错就漏,而且两张表对不上的日子直接消失 | 两张值班表合并成一个「日期→人→班次」索引,请假区间逐日去查这个索引,跟月份边界完全无关 |
| 老表混进本月的表 | 不校验月份,上月的班照算 | 每张值班表声明自己的月份,日期不属于的行进「异常行」表标疑,不静默吞掉 |
核心思路一句话:先把所有表摊平成一个按日期的索引,再做核对。「跨月」就从一个特殊情况退化成普通的日期匹配——特殊逻辑越少,bug 越少。
先 pip install openpyxl。值班表列:日期 / 班次 / 姓名;请假单列:姓名 / 开始日期 / 结束日期。运行:
python month_cross_check.py 10月值班.xlsx 11月值班.xlsx 请假单.xlsx 核对结果.xlsx
输出 xlsx 三张表:冲突明细、跨月拆分说明(哪些请假横跨了月份)、异常行(跨月混入/假日期/脏行,每行带来源文件名)。需要审批状态过滤的,和状态过滤版叠加用。
str() 出来带 00:00:00:第一版对值班表和请假单的日期解析行为不一致——同一天的数据,值班表读得出来、请假单读不出来,全部 5 条请假进了异常表,值班 0 条。原因就是值班表列我 str() 之后先截断再解析,请假单漏了这一步。教训:日期归一化函数必须全表共用一个,别在两个读入口各写一份。11-01 → 李四 的记录,同时注意下月那天可能本来就有这人的班,别重复记。cmp:xlsx 内部带时间戳,同一内容两次保存字节必然不同,cmp 报 differ 会让人误以为脚本不稳定。要比就用读出来的内容(sheet 名 + 所有行)做 md5。跨月不是边角案例:只要业务按月滚,月底交接永远是事故高发区。核对脚本要么明确处理跨月,要么在文档里写死「仅限单月」——最怕的是默认能处理,实际漏检。
懒得自己跑?把值班表和请假单发我(后台留言),AI 跑完人工核对后把冲突清单发回给你,9.9 元/次,虚拟物品交付后不退款、结果不符免费重做。更多现成脚本与代做服务 →
相关阅读:值班表×请假单跨表核对(基础版) · 请假单审批状态过滤版 · 值班表排班冲突检测 · 考勤月度汇总表一键生成 · 加班表×工资表工时对账