roster-generator
SKILL.md
排班表生成技能
自动生成月度排班表,支持工作日、周末、法定节假日分别循环排班。
核心规则
排班逻辑
- 每天安排: 1 个第一值班 + 1 个第二值班(备份)
- 第二值班: 等于明天的第一值班
- 循环规则: 人员排完后从头循环
- 独立循环: 工作日、周末、法定节假日分别维护独立循环队列
输入格式
文本文件(每行一个名字):
张三
李四
王五
赵六
输出格式
Excel 表格,包含:
- 日期、星期、第一值班、第二值班
- 周末(周六/周日)高亮显示
- 法定节假日高亮显示(不同颜色)
快速开始
# 安装依赖
pip install -r requirements.txt
# 生成排班表
python scripts/generate_roster.py \
--names "staff.txt" \
--year 2026 \
--month 4 \
--output "roster_2026_04.xlsx"
使用示例
示例 1: 基本用法
# 准备人员名单
echo -e "张三\n李四\n王五\n赵六" > staff.txt
# 生成 2026 年 4 月排班表
python scripts/generate_roster.py \
--names staff.txt \
--year 2026 \
--month 4 \
--output roster_2026_04.xlsx
示例 2: 指定节假日
python scripts/generate_roster.py \
--names staff.txt \
--year 2026 \
--month 10 \
--holidays "2026-10-01,2026-10-02,2026-10-03,2026-10-04,2026-10-05,2026-10-06,2026-10-07" \
--output roster_2026_10.xlsx
示例 3: 从文件读取人员名单
python scripts/generate_roster.py \
--names team_members.txt \
--year 2026 \
--month 12 \
--output roster_2026_12.xlsx
输出示例
生成的 Excel 包含以下列:
| 日期 | 星期 | 类型 | 第一值班 | 第二值班 |
|---|---|---|---|---|
| 2026-04-01 | 星期三 | 工作日 | 张三 | 李四 |
| 2026-04-02 | 星期四 | 工作日 | 李四 | 王五 |
| 2026-04-03 | 星期五 | 工作日 | 王五 | 赵六 |
| 2026-04-04 | 星期六 | 周末 | 张三 | 李四 |
| 2026-04-05 | 星期日 | 周末 | 李四 | 王五 |
| 2026-04-06 | 星期一 | 工作日 | 赵六 | 张三 |
高亮规则:
- 周末(周六/周日):黄色背景
- 法定节假日:红色背景
脚本说明
generate_roster.py
主脚本,生成月度排班表。
python scripts/generate_roster.py --help
holiday_checker.py
节假日判断工具,支持查询中国法定节假日。
roster_utils.py
排班逻辑核心,处理三种场景独立循环。
依赖安装
pip install -r requirements.txt
主要依赖:
- openpyxl: Excel 文件生成
- python-dateutil: 日期处理
- holidays: 法定节假日查询
配置选项
命令行参数
| 参数 | 说明 | 必需 | 默认值 |
|---|---|---|---|
--names |
人员名单文件路径 | 是 | - |
--year |
排班年份 | 是 | - |
--month |
排班月份 | 是 | - |
--output |
输出 Excel 文件路径 | 是 | - |
--holidays |
法定节假日(逗号分隔) | 否 | 自动查询 |
--verbose |
输出详细信息 | 否 | False |
注意事项
- 人员名单必须有序 - 按输入顺序排班
- 三种场景独立循环 - 工作日、周末、节假日各自维护队列
- 节假日配置 - 可手动指定或自动查询
- 第二值班规则 - 始终等于明天的第一值班
- 跨月处理 - 如果月底第二值班在次月,会显示次月日期
文件结构
roster-generator/
├── SKILL.md # 技能说明文档
├── requirements.txt # Python 依赖
├── scripts/
│ ├── generate_roster.py # 主脚本
│ ├── roster_utils.py # 排班逻辑核心
│ └── holiday_checker.py # 节假日查询
└── examples/
└── staff.txt # 示例人员名单
完整示例
1. 准备人员名单
cat > staff.txt << EOF
张三
李四
王五
赵六
钱七
孙八
EOF
2. 生成排班表
python scripts/generate_roster.py \
--names staff.txt \
--year 2026 \
--month 4 \
--output roster_2026_04.xlsx
3. 查看统计
# 脚本会自动输出统计信息
# 例如:
# 张三:工作日 6 次,周末 2 次,节假日 1 次
# 李四:工作日 6 次,周末 2 次,节假日 1 次