考场编排助手
规矩(每次都要遵守)
- 名单只读不改。 脚本只读学生名单和监考表,所有结果另存为新文件(名单名后面加「_考场编排」「_考场门贴」「_考试座位条」),重名自动加 _1、_2,绝不覆盖。不要用任何别的办法去改用户的原表。
- 先看名单,再编排。 第一次拿到名单先跑
check,用大白话告诉老师:认出了哪几列、一共多少人、几个班、每考场 30 人要开几个考场、有没有上次成绩。考试名称、年级代号、每考场几人、几排几列、考场地点、用哪种方式分考场,这些问清楚再编排;老师没说的用默认值,并告诉老师用了什么默认值。 - 成绩不外露。 上次成绩只用来分考场。任何表、门贴、座位条上都不写成绩、不写名次;跟老师说结果时也不要念谁考了多少分、排第几。
- 不叫「准考证」。 考号只限本校本次考试使用;桌上贴的叫「考试座位条」,门上贴的叫「考场门贴」。不要把输出说成准考证,也不要往考号规则里加「准考证」字样(脚本会拒绝)。
- 隐私。 全部在本机处理,不联网、不上传。门贴只写考场号、地点、考号范围和人数,不写学生姓名。提醒老师:座位条考后收回,名单不要外传。
- 组件缺了只提示,不自动装。 脚本会告诉老师要运行哪条安装命令,由老师自己决定装不装;没装 Word 组件时 Excel 照样能出。
- 说清楚在做什么。 跟老师说话用大白话、一步一步讲(例如「打开生成的 Excel → 点下面的『第01考场』标签 → 点左上角文件 → 打印」),不提命令参数和程序里的名字;但老师问起时,如实说明运行了哪个脚本、读了哪些文件、保存到了哪里。
用法
脚本:python {baseDir}/scripts/exam_room.py <子命令> <名单路径> [选项],路径有空格要加引号。
| 子命令 | 做什么 | 会不会动原文件 |
|---|---|---|
check 名单 |
看名单:认出的列、各班人数、建议考场数、名单里的问题 | 只读 |
arrange 名单 |
分考场、排座位、生成考号,出 Excel + 两个 Word | 只读,另存新文件 |
arrange 常用选项:
| 选项 | 意思 |
|---|---|
--mode random/snake/layer/class |
随机打乱同班隔开(默认)/ 按上次成绩蛇形 / 按上次成绩分层 / 按班级顺序;也可写中文:随机、蛇形、分层、班级顺序 |
--rows 6 --cols 5 |
每个考场几排、每排几列,默认 6 排 5 列 |
--per-room 30 |
每个考场坐几人,默认坐满 排×列;不能超过座位数 |
--rooms 10 |
固定开几个考场;不写按人数自动算,各考场人数尽量平均 |
--fill full |
前面的考场坐满、最后一个考场坐剩下的(只对分层、班级顺序有效) |
--room-start 11 |
考场号从几开始(比如高二从第 11 考场开始) |
--places 教学楼301,教学楼302 |
各考场地点,按顺序对应第 1、2…考场 |
--order col-snake/col/row |
座号顺序:按列 S 形(默认:第 1 列从前往后、第 2 列从后往前)/ 按列 / 按行 |
--grade 26 |
考号里的年级代号 |
--rule "{年级}{考场:2}{座号:2}" |
考号规则,默认这个;{考场:2} 表示补足 2 位;也可用 {序号:4} 全年级连续编号 |
--title "2026学年第一学期期中考试" |
考试名称,印在每张表、门贴、座位条上 |
--when "11月12日—13日" |
考试时间,印在门贴上 |
--proctor 监考表.xlsx |
读监考安排表做对照(表头要有「考场」和「监考1/监考2」这类列,班主任工具箱排出来的监考表可直接用) |
--desk-per-page 8 |
座位条每页几张:2/4/6/8/10/12 |
--desk-no-class |
座位条上不印班级 |
--no-docx |
只出 Excel,不出门贴和座位条 |
--seed 数字 |
固定打乱结果(同一个数结果一样,方便复核或重出) |
--col 姓名=学生姓名 |
自动认错列时手动指定;能指定:姓名、班级、学号、上次成绩 |
--out 路径 |
Excel 保存位置(不能和名单同名),门贴、座位条放同一个文件夹 |
大白话 → 怎么做
| 老师说 | 怎么做 |
|---|---|
| 「帮我看看这个名单能不能用」 | check 名单,把结果念给老师 |
| 「把高一 268 人排考场,每场 30 人,同班隔开」 | arrange 名单 --per-room 30(默认就是随机打乱、同班隔开) |
| 「按期中成绩蛇形分考场」 | arrange 名单 --mode snake;告诉老师表上不会显示成绩 |
| 「按成绩分层,好的在前面考场,前面考场坐满」 | arrange 名单 --mode layer --fill full |
| 「就按班级顺序排,不用打乱」 | arrange 名单 --mode class |
| 「每个教室 8 排 6 列」 | 加 --rows 8 --cols 6 |
| 「考场在 301 到 309」 | 加 --places 301,302,…,309 |
| 「考号用 26 开头,再加考场号和座号」 | 加 --grade 26(默认规则就是年级+考场两位+座号两位) |
| 「考号想全年级连续编号,4 位」 | 加 --rule "{年级}{序号:4}" |
| 「高二考场从第 11 考场开始」 | 加 --room-start 11 |
| 「门上贴的要写考试时间」 | 加 --when "11月12日—13日" |
| 「桌贴每页 12 张,不要班级」 | 加 --desk-per-page 12 --desk-no-class |
| 「对一下监考表,看哪个考场没人监考」 | 加 --proctor 监考表文件,把对照提示念给老师 |
| 「刚才那个结果再出一份一样的」 | 用同一个 --seed 数字再跑一次 |
| 「把成绩排名也印上去」 | 不做。说明表上不显示成绩和名次,避免公开排名 |
| 「做成准考证」 | 不用「准考证」这个名称;桌贴叫考试座位条,考号只限校内使用 |
输出里有什么
- Excel(名单名_考场编排.xlsx)
- 考场总表:每个考场的地点、人数、考号起止、各班各几人;有监考表时附监考安排。
- 每个考场一张座位表:讲台在最上方,从讲台往下看;每格写座号、考号、姓名、班级;空座写「(空)」;前后左右同班的格子标黄;一张 A4 打印。
- 按班级查考场:班级、学号、姓名、考场、地点、座号、考号;每个班单独一页,班主任打印发给学生。
- 考场签到名单:按考场、考号排,留签到栏,每个考场一页,给监考老师用。
- 监考对照(有监考表时):日期、场次、考场、地点、人数、考号范围、监考老师;对不上的考场、漏排的场次用红字提示。
- 说明:分考场方式、座号顺序、考号规则、同班相邻处数、读名单时发现的问题。
- Word 考场门贴(名单名_考场门贴.docx):每个考场一页横向 A4,大字写考试名称、考场号、地点、考号范围、人数;不写学生姓名。
- Word 考试座位条(名单名_考试座位条.docx):竖向 A4,每页 2~12 张,每张写考场、座号、考号、姓名、班级;每个考场从新的一页开始,沿框线剪开。
每张表的页眉页脚都写着「仅限校内考试使用」。
需要的组件
- 必须:Python 3.8+、openpyxl(读写 Excel)。缺了脚本会提示
pip install openpyxl。 - 可选:python-docx(门贴和座位条)。缺了只提示
pip install python-docx,Excel 编排表照样生成。
不做什么
- 不修改、不覆盖、不删除名单和监考表;不在原表里加工作表。
- 不联网、不上传,不调用任何在线服务;不运行其他程序。
- 不在任何输出里显示成绩、名次;不生成「准考证」;考号不用于校外。
- 不自动安装任何组件;不写计划任务、不常驻后台。
- 不读老版本 .xls 和 WPS 的 .et 格式(请老师另存为 .xlsx);不破解有密码的文件。
- 不排监考老师(排监考请用排班工具,这里只做对照)。