手把手教你用Excel+Python实现学生奖惩档案数字化
1. 开发环境准备与依赖安装
在开始编码之前,需要确保本地已经安装了Python解释器。为了确保库的兼容性,建议使用Python 3.9及以上版本。如果尚未安装,请直接访问Python官网下载对应操作系统的安装包并完成安装,安装过程中务必勾选"Add Python to PATH"选项。
本项目核心依赖三个第三方库:pandas用于高效处理Excel数据,openpyxl用于读写xlsx文件格式,jinja2用于渲染HTML格式的数字化档案模板。打开终端或命令提示符,直接执行以下命令完成安装:
pip install pandas openpyxl jinja2
安装完成后,为了方便管理,建议在本地创建一个名为student_archive_system的文件夹,后续的所有代码文件和数据文件都将存放在此目录下。
2. 数据源Excel结构设计
为了实现自动化处理,必须规范输入数据的格式。请在项目根目录下新建一个名为data.xlsx的Excel文件。不要随意修改表头名称,因为代码将严格按照以下列名进行数据映射。
Excel文件应包含以下列,第一行为表头:
- 学号:文本格式,学生的唯一标识。
- 姓名:文本格式,学生姓名。
- 班级:文本格式,如"三年二班"。
- 类型:文本格式,仅允许填写"奖励"或"惩罚"。
- 分值:数值格式,奖励为正数(如5),惩罚为负数(如-2)。
- 日期:日期格式,记录奖惩发生的时间。
- 详情:文本格式,具体事由描述。
为了方便测试,可以在data.xlsx中预填几条模拟数据,确保分值列包含正负数以验证逻辑正确性。
3. 数字化档案生成逻辑详解
本系统的核心逻辑是将扁平化的Excel表格记录,转换为按学生分类的结构化数据,并计算每个学生的综合德育分,最后生成可视化的HTML网页档案。HTML档案可以直接在浏览器中打开,方便打印或长期存档。
3.1 数据读取与清洗
使用pandas读取Excel文件时,会自动将第一行识别为表头。为了防止数据中存在空行导致计算错误,代码中会执行dropna()操作剔除无效记录。同时,将"日期"列强制转换为日期格式,确保档案中显示的时间标准统一。
3.2 档案分值计算规则
系统会自动根据"学号"对学生记录进行分组(Group By)。对于每一个学生,系统会遍历其所有的奖惩记录,利用sum()函数累加"分值"列,得出该学生的当前德育总分。这一步完全自动化,无需人工计算。
3.3 HTML模板渲染
为了生成美观的档案,我们定义了一个HTML字符串模板。模板中使用了jinja2的循环语法{% for item in records %}来动态插入每一条奖惩详情。样式部分直接内嵌了CSS,设置了表格边框、标题居中以及分数的颜色标记(正分显示绿色,负分显示红色),确保生成的页面直观易读。
4. 完整代码实现
在项目根目录下新建文件main.py,并将以下完整代码直接复制粘贴进去。该代码包含了所有必要的逻辑,包括文件检查、数据处理、HTML生成及异常捕获。
```python
import pandas as pd

from jinja2 import Template
import os
from datetime import datetime
定义HTML模板,用于生成档案页面 HTML_TEMPLATE = """
姓名:{{ name }}
学号:{{ student_id }}
班级:{{ class_name }}
生成时间:{{ generate_time }}
| 日期 | 类型 | 分值 | 详情描述 |
|---|---|---|---|
| {{ record.date }} | {{ record.type }} | {{ record.score }} | {{ record.detail }} |
```
5. 程序运行与结果查看
代码编写完毕后,即可进行实际运行。确保data.xlsx和main.py在同一目录下。在终端中执行以下命令启动程序:
python main.py
程序运行后,终端会实时显示处理进度。如果一切顺利,当前目录下会自动生成一个名为archives的文件夹。打开该文件夹,你会会看到每个学生都对应生成了一个独立的HTML文件。
双击任意一个HTML文件,浏览器将展示该学生的详细奖惩档案。页面顶部会自动计算出该学生的德育总分,正分显示为绿色,负分显示为红色,下方表格详细列出了每一次奖惩的时间、类型和具体事由。这种格式非常适合直接打印纸质存档,或者作为电子数据发送给家长和学生。
6. 常见问题与排错
在实操过程中,可能会遇到ModuleNotFoundError,这通常是因为虚拟环境未激活或依赖未安装在当前Python环境中。请务必重新检查pip list中是否存在步骤1中安装的三个库。
如果遇到KeyError,请检查data.xlsx的表头名称是否与代码中的要求完全一致,包括不能有空格。Excel文件必须处于关闭状态,程序才能对其进行读取操作。