成绩单 PDF → Excel 转换
将大学中文成绩单(PDF 或图片)识别并输出为结构化 Excel 文件,主要用于香港高才通等签证申请。
输出格式规范
Excel 文件结构
- Sheet 名称:
分学期 - 文件格式:
.xlsx(严格 xlsx,不支持 xls 或其他格式) - Header(第 1 行):
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| 课程名 | 分数 | 学分 | 学时 | 学时单位 | 课程类别 | 学期 |
- 数据从第 2 行开始,每行一门课程
- 学时和学时单位列通常为空(中国大学成绩单一般只给学分)
学期格式
格式:YYYY-YYYY-N
- 前两个年份:学年起止(如
2012-2013表示 2012-2013 学年) N:学期序号1= 第一学期(秋季,9月-1月)2= 第二学期(春季,2月-6月)3= 第三学期/暑期学期
示例:
- 2012-2013-1:大二上学期(2012年秋季)
- 2012-2013-2:大二下学期(2013年春季)
- 2013-2014-3:大三暑期学期
注意:学期数严格按成绩单原文填写,不要自行推算。成绩单上每个课程所属的学年学期通常分批标注。
课程类别规范
常见的课程类别(严格按成绩单原文分类):
| 类别 | 说明 |
|---|---|
| 必修课 | 公共必修(英语、体育、政治、军事理论等) |
| 专业必修课 | 专业核心课程 |
| 专业选修课 | 专业方向选修 |
| 公共选修课 | 通识/校选修课 |
| 毕业论文 | 毕业设计/论文 |
关键规则:课程类别以成绩单原文标注为准。如果成绩单上英语/体育/政治类课程的类别标注为"必修课",就不要写成"公共必修课"——保持与原文字一致。
分数处理
- 数字分数保持原值(如
86、92) - 等级制分数保留中文原文(如
优秀、良好、中等、及格) - 不要将等级转换为数字,也不要将数字转换为等级
PDF 识别要点
多列布局处理(重点)
中国大学成绩单 PDF 通常采用双列布局(一页两列课程)。
识别规则:
1. 先识别页面上的列边界(通常中间有明显间距)
2. 阅读顺序:左列从上到下 → 右列从上到下(不是从左到右逐行!)
3. 两列拼接时,左列的全部课程在前,右列的全部课程在后
4. 同一列的课程保持原始上下顺序
验证方法:
- 检查识别出的课程总数是否与成绩单一致
- 检查每学期的课程数量是否合理(一般每学期 8-14 门)
- 如果某学期只有 3-4 门课程,很可能是只读了一列漏了另一列
学期信息定位
学期信息(如 "2012-2013学年第一学期")通常出现在:
- 每个学期块的标题行
- 表格的 section header
- 课程列表中的"学期"列
如果成绩单表格中已有"学期"列,直接使用该列的值,不要自行推算。
页码和分页
多页成绩单:
- 每页的列布局相同
- 学期可能跨页,需要合并同一学期的课程
- 注意检查最后一页是否有遗漏
常见错误和注意事项
1. 文件格式问题
症状:提交时系统提示"只接受 xls/xlsx 文件"但实际格式正确。
原因:部分在线系统对非 Office 生成的 xlsx 文件校验较严格(如 Python openpyxl 生成的文件缺少某些元数据)。
解决方案:
- 方案 A:用 Excel/WPS 打开生成的文件,另存为新文件
- 方案 B:创建一个空 Excel,手动粘贴数据后保存
- 方案 C:用在线 Excel 工具打开后重新下载
2. 课程归类错误
- 不要自行推断课程类别,以成绩单标注为准
- 同一门课在不同学校可能有不同归类(如"计算机网络"有的算专业必修,有的算专业选修)
3. 学期序号错误
- 不要按课程出现顺序自行编号
- 同一学期的课程可能散布在不同列/不同页
- 学期号必须与成绩单上的学年学期标注严格对应
4. 双列布局读错顺序
- 错误读法:第 1 行左 → 第 1 行右 → 第 2 行左 → 第 2 行右
- 正确读法:左列全部(上→下)→ 右列全部(上→下)
验证清单
完成输出后逐项检查:
- [ ] 课程总数与成绩单一致
- [ ] 每学期课程数合理(8-14 门/学期)
- [ ] 课程名称与成绩单完全一致(包括标点符号、括号类型)
- [ ] 学分总数合理(四年制本科通常 150-170 学分)
- [ ] 学期格式正确(
YYYY-YYYY-N) - [ ] 课程类别与原文一致
- [ ] 文件为 .xlsx 格式,Sheet 名为"分学期"
- [ ] 用 Excel/WPS 能正常打开
工作流程总结
1. 读取成绩单 PDF/图片
├── 识别页面布局(单列/双列)
├── 确认阅读顺序
└── 提取学期标注信息
2. 数据提取
├── 逐课程提取:课程名、分数、学分、课程类别、学期
├── 处理多列布局(左列→右列)
└── 处理等级制分数(优秀/良好/中等/及格)
3. 生成 Excel
├── 创建 Sheet "分学期"
├── 写入 Header(课程名/分数/学分/学时/学时单位/课程类别/学期)
├── 按学期排序数据
└── 保存为 .xlsx
4. 验证
├── 课程总数核对
├── 每学期课程数检查
├── 学分总计验证
└── 文件可打开性验证