Administrator
发布于 2026-06-21 / 0 阅读
0
0

Python 自动化办公:批量处理 Excel 表格数据实战

一、前言

日常工作经常需要处理 Excel 表格:批量录入数据、统计分数、筛选内容、汇总台账,手动操作耗时且容易出错。本篇使用openpyxl库实现 Excel 自动化,支持读写.xlsx格式文件,无需打开 Excel 软件,纯代码完成表格处理,适合学生成绩、台账、报表批量操作。

二、环境安装 openpyxl

CMD 执行安装命令,国内镜像加速:

bash

运行

pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple

适用文件:.xlsx(Office2007 及以上版本),不支持旧版.xls文件。

三、Excel 基础概念

  1. 工作簿 (Workbook):整个 Excel 文件

  2. 工作表 (Worksheet):底部 Sheet1/Sheet2 分页

  3. 单元格 (Cell):表格最小格子,定位方式 行号,列号(行从 1 开始,列从 1 开始)

  4. 行、列:批量读取整行 / 整列数据

四、基础 1:新建 Excel 并写入数据

python

运行

from openpyxl import Workbook

# 1. 创建空白工作簿
wb = Workbook()
# 获取默认工作表
ws = wb.active
# 修改工作表名称
ws.title = "学生成绩表"

# 方式1:直接指定单元格写入
ws["A1"] = "姓名"
ws["B1"] = "年龄"
ws["C1"] = "分数"

# 方式2:行号列号写入
ws.cell(row=2, column=1, value="张三")
ws.cell(row=2, column=2, value=18)
ws.cell(row=2, column=3, value=88)

# 方式3:批量追加一行数据
ws.append(["李四", 19, 92])
ws.append(["王五", 18, 76])

# 保存文件到本地
wb.save("学生成绩.xlsx")
print("Excel文件创建完成!")

五、基础 2:读取已有 Excel 表格

python

运行

from openpyxl import load_workbook

# 打开Excel文件,read_only=False代表可读可写
wb = load_workbook("学生成绩.xlsx")
# 根据工作表名获取sheet
ws = wb["学生成绩表"]

# 1. 读取单个单元格
name = ws["A2"].value
score = ws["C2"].value
print(f"{name} 的分数:{score}")

# 2. 循环读取所有行数据
print("\n===== 全部学生数据 =====")
for row in ws.iter_rows(min_row=2, values_only=True):
    # row = (姓名,年龄,分数)
    print(f"姓名:{row[0]},年龄:{row[1]},分数:{row[2]}")

# 关闭工作簿
wb.close()

参数min_row=2:跳过第一行表头;values_only=True直接获取单元格内容,简化代码。

六、基础 3:修改表格、追加新数据

python

运行

from openpyxl import load_workbook

wb = load_workbook("学生成绩.xlsx")
ws = wb["学生成绩表"]

# 修改已有单元格数据
ws["C2"] = 95
# 新增一行学生
ws.append(["赵六", 17, 90])

# 保存覆盖原文件
wb.save("学生成绩.xlsx")
wb.close()
print("表格数据修改成功")

七、实战 1:批量统计平均分

读取表格所有学生分数,计算班级平均分并写入表格末尾

python

运行

from openpyxl import load_workbook

wb = load_workbook("学生成绩.xlsx")
ws = wb["学生成绩表"]
score_list = []

# 遍历所有学生分数
for row in ws.iter_rows(min_row=2, values_only=True):
    score = row[2]
    if isinstance(score, (int, float)):
        score_list.append(score)

# 计算平均分
avg = sum(score_list) / len(score_list)
# 在表格最后一行写入平均分
last_row = ws.max_row + 1
ws.cell(row=last_row, column=1, value="班级平均分")
ws.cell(row=last_row, column=3, value=round(avg, 2))

wb.save("学生成绩.xlsx")
wb.close()
print(f"班级平均分:{avg:.2f},已写入表格")

八、实战 2:分数筛选,导出及格 / 不及格名单

python

运行

from openpyxl import load_workbook

wb = load_workbook("学生成绩.xlsx")
ws = wb["学生成绩表"]

pass_list = []
fail_list = []

for row in ws.iter_rows(min_row=2, values_only=True):
    name, age, score = row
    if score >= 60:
        pass_list.append(name)
    else:
        fail_list.append(name)

print("及格学生:", pass_list)
print("不及格学生:", fail_list)
wb.close()

九、完整封装工具函数:一键批量写入成绩

python

运行

from openpyxl import Workbook

def create_score_excel(save_name, data_list):
    """
    生成学生成绩Excel
    :param save_name: 保存文件名
    :param data_list: 二维列表,存放学生数据 [[姓名,年龄,分数],...]
    """
    wb = Workbook()
    ws = wb.active
    ws.title = "成绩"
    # 写入表头
    ws.append(["姓名", "年龄", "分数"])
    # 批量写入所有学生
    for student in data_list:
        ws.append(student)
    wb.save(save_name)
    print(f"{save_name} 创建完成,共{len(data_list)}条记录")

# 调用函数
if __name__ == "__main__":
    student_data = [
        ["小明", 18, 93],
        ["小红", 18, 85],
        ["小周", 19, 58],
        ["小陈", 18, 77]
    ]
    create_score_excel("班级成绩汇总.xlsx", student_data)

十、新手常见报错与解决

  1. 文件不存在:FileNotFoundError,检查 Excel 文件路径、文件名

  2. 打不开 xls 文件:openpyxl 仅支持 xlsx,另用 xlrd 库处理旧 xls

  3. 保存后表格空白:忘记执行wb.save()

  4. 数据修改不生效:打开文件时手动占用,关闭 Excel 再运行代码

  5. 数值计算报错:单元格内容是文字而非数字,增加类型判断isinstance

十一、下期预告

下一篇:Python 简易文字聊天机器人完整实现,综合循环、判断、输入输出、函数做趣味交互小项目。


评论