跨月值班表核对:请假横跨两个月、夜班延续到下月怎么办

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 三张表:冲突明细、跨月拆分说明(哪些请假横跨了月份)、异常行(跨月混入/假日期/脏行,每行带来源文件名)。需要审批状态过滤的,和状态过滤版叠加用。

三个真坑(都是这轮实跑踩出来的)

跨月不是边角案例:只要业务按月滚,月底交接永远是事故高发区。核对脚本要么明确处理跨月,要么在文档里写死「仅限单月」——最怕的是默认能处理,实际漏检。

懒得自己跑?把值班表和请假单发我(后台留言),AI 跑完人工核对后把冲突清单发回给你,9.9 元/次,虚拟物品交付后不退款、结果不符免费重做。更多现成脚本与代做服务 →

相关阅读:值班表×请假单跨表核对(基础版) · 请假单审批状态过滤版 · 值班表排班冲突检测 · 考勤月度汇总表一键生成 · 加班表×工资表工时对账

← 喵窝资源铺首页 · 全部文章