当前位置: 代码网 > it编程>前端脚本>Python > Python使用openpyxl生成、读取、修改Excel

Python使用openpyxl生成、读取、修改Excel

2026年05月09日 Python 我要评论
很多日常办公场景都会遇到 excel:整理销售数据、统计考勤、合并表格、批量改格式、给领导生成周报。如果每次都靠手动复制、筛选、改颜色,效率会很低,也容易出错。openpyxl 是 python 里非

很多日常办公场景都会遇到 excel:整理销售数据、统计考勤、合并表格、批量改格式、给领导生成周报。如果每次都靠手动复制、筛选、改颜色,效率会很低,也容易出错。

openpyxl 是 python 里非常常用的 excel 处理库,适合操作 .xlsx 文件。本文用一份完整演示代码,带大家学会三个高频动作:

  • 生成 excel 文件
  • 读取 excel 内容
  • 修改已有 excel 文件

适合刚开始学习 python、也想提升 excel 办公效率的小伙伴。

一、安装 openpyxl

先在命令行安装:

pip install openpyxl

如果你使用的是多个 python 版本,也可以这样安装:

python -m pip install openpyxl

二、完整演示代码

下面这段代码会完成一个完整流程:

  1. 生成一份 student_score.xlsx
  2. 写入学生成绩数据
  3. 设置标题、表头、列宽、颜色、冻结窗格
  4. 读取 excel 并打印每一行
  5. 修改 excel:新增平均分、等级、备注,并保存为新文件

建议新建一个 openpyxl_excel_demo.py 文件,把代码复制进去直接运行。

from pathlib import path

from openpyxl import workbook, load_workbook
from openpyxl.styles import font, patternfill, alignment, border, side
from openpyxl.utils import get_column_letter


base_dir = path(__file__).resolve().parent
source_file = base_dir / "student_score.xlsx"
updated_file = base_dir / "student_score_updated.xlsx"


def create_excel(file_path: path) -> none:
    """生成一份学生成绩 excel。"""
    wb = workbook()
    ws = wb.active
    ws.title = "成绩表"

    # 标题
    ws.merge_cells("a1:f1")
    ws["a1"] = "学生成绩统计表"
    ws["a1"].font = font(name="微软雅黑", size=16, bold=true, color="ffffff")
    ws["a1"].fill = patternfill("solid", fgcolor="4472c4")
    ws["a1"].alignment = alignment(horizontal="center", vertical="center")
    ws.row_dimensions[1].height = 28

    # 表头和数据
    headers = ["学号", "姓名", "语文", "数学", "英语", "班级"]
    rows = [
        [1001, "张三", 88, 92, 85, "一班"],
        [1002, "李四", 76, 81, 79, "一班"],
        [1003, "王五", 95, 89, 93, "二班"],
        [1004, "赵六", 68, 72, 70, "二班"],
        [1005, "孙七", 84, 86, 91, "三班"],
    ]

    ws.append([])
    ws.append(headers)
    for row in rows:
        ws.append(row)

    # 样式
    header_fill = patternfill("solid", fgcolor="d9eaf7")
    thin = side(style="thin", color="d9d9d9")
    border = border(left=thin, right=thin, top=thin, bottom=thin)

    for row in ws.iter_rows(min_row=3, max_row=ws.max_row, min_col=1, max_col=6):
        for cell in row:
            cell.border = border
            cell.alignment = alignment(horizontal="center", vertical="center")

    for cell in ws[3]:
        cell.font = font(bold=true)
        cell.fill = header_fill

    # 设置列宽
    column_widths = [12, 12, 10, 10, 10, 12]
    for index, width in enumerate(column_widths, start=1):
        ws.column_dimensions[get_column_letter(index)].width = width

    # 冻结表头,开启筛选
    ws.freeze_panes = "a4"
    ws.auto_filter.ref = f"a3:f{ws.max_row}"

    wb.save(file_path)
    print(f"已生成 excel:{file_path}")


def read_excel(file_path: path) -> none:
    """读取 excel 内容并打印。"""
    wb = load_workbook(file_path)
    ws = wb["成绩表"]

    print("\n读取 excel 内容:")
    for row in ws.iter_rows(min_row=4, values_only=true):
        student_id, name, chinese, math, english, class_name = row
        print(
            f"学号:{student_id},姓名:{name},"
            f"语文:{chinese},数学:{math},英语:{english},班级:{class_name}"
        )


def update_excel(source_path: path, target_path: path) -> none:
    """修改 excel,增加平均分、等级、备注。"""
    wb = load_workbook(source_path)
    ws = wb["成绩表"]

    # 新增表头
    ws["g3"] = "平均分"
    ws["h3"] = "等级"
    ws["i3"] = "备注"

    for cell in ws[3]:
        cell.font = font(bold=true)
        cell.fill = patternfill("solid", fgcolor="d9eaf7")
        cell.alignment = alignment(horizontal="center", vertical="center")

    for row_index in range(4, ws.max_row + 1):
        chinese = ws.cell(row=row_index, column=3).value
        math = ws.cell(row=row_index, column=4).value
        english = ws.cell(row=row_index, column=5).value

        average = round((chinese + math + english) / 3, 2)
        ws.cell(row=row_index, column=7).value = average

        if average >= 90:
            level = "优秀"
            remark = "继续保持"
        elif average >= 80:
            level = "良好"
            remark = "表现稳定"
        elif average >= 70:
            level = "合格"
            remark = "仍有提升空间"
        else:
            level = "待提升"
            remark = "建议重点辅导"

        ws.cell(row=row_index, column=8).value = level
        ws.cell(row=row_index, column=9).value = remark

    # 给新增区域补样式
    thin = side(style="thin", color="d9d9d9")
    border = border(left=thin, right=thin, top=thin, bottom=thin)
    for row in ws.iter_rows(min_row=3, max_row=ws.max_row, min_col=1, max_col=9):
        for cell in row:
            cell.border = border
            cell.alignment = alignment(horizontal="center", vertical="center")

    for column in range(7, 10):
        ws.column_dimensions[get_column_letter(column)].width = 14

    ws.auto_filter.ref = f"a3:i{ws.max_row}"
    wb.save(target_path)
    print(f"\n已修改并另存为:{target_path}")


def main() -> none:
    create_excel(source_file)
    read_excel(source_file)
    update_excel(source_file, updated_file)


if __name__ == "__main__":
    main()

三、代码运行后会得到什么

运行命令:

python openpyxl_excel_demo.py

执行完成后,当前目录会生成两个文件:

  • student_score.xlsx:原始学生成绩表
  • student_score_updated.xlsx:新增平均分、等级、备注之后的成绩表

控制台也会打印读取到的数据,例如:

已生成 excel:student_score.xlsx

读取 excel 内容:
学号:1001,姓名:张三,语文:88,数学:92,英语:85,班级:一班
学号:1002,姓名:李四,语文:76,数学:81,英语:79,班级:一班

已修改并另存为:student_score_updated.xlsx

四、核心知识点拆解

1. 创建工作簿

wb = workbook()
ws = wb.active
ws.title = "成绩表"

workbook() 表示新建一个 excel 文件,wb.active 获取默认工作表,ws.title 可以修改工作表名称。

2. 写入单元格

ws["a1"] = "学生成绩统计表"
ws.append(["学号", "姓名", "语文", "数学", "英语", "班级"])

常见写法有两种:

  • ws["a1"] = 值:适合写入指定单元格
  • ws.append([...]):适合按行批量追加数据

3. 读取工作簿

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

读取已有 excel 文件时使用 load_workbook()。如果文件里有多个 sheet,可以通过名称获取对应工作表。

4. 遍历行数据

for row in ws.iter_rows(min_row=4, values_only=true):
    print(row)

iter_rows() 很适合批量读取表格数据。

  • min_row=4 表示从第 4 行开始读
  • values_only=true 表示只读取单元格的值,不读取单元格对象

5. 修改并保存为新文件

wb = load_workbook("student_score.xlsx")
ws = wb["成绩表"]
ws["g3"] = "平均分"
wb.save("student_score_updated.xlsx")

实际工作中,建议不要直接覆盖原始文件。可以先读取源文件,再另存为新文件,这样出错时还能保留原始数据。

五、openpyxl 适合哪些办公自动化场景

openpyxl 可以帮你处理很多重复性的 excel 工作,例如:

  • 批量生成日报、周报、月报
  • 批量读取多个 excel 文件的数据
  • 给 excel 自动加表头、颜色、边框、列宽
  • 根据分数、金额、状态自动计算等级
  • 自动筛选异常数据
  • 批量修改表格格式
  • 自动生成带公式的统计表

如果你每天都在重复打开 excel、复制粘贴、改格式,那么这类脚本很值得学习。

六、学习建议

刚学 openpyxl 时,不建议一开始就追求复杂功能。可以按下面顺序练习:

  1. 先会新建 excel、写入几行数据
  2. 再学读取已有 excel
  3. 再学修改单元格内容
  4. 然后学习样式、列宽、冻结窗格、筛选
  5. 最后结合真实工作表,把重复操作写成脚本

python 办公自动化的价值,不在于写出多复杂的代码,而在于把每天重复 30 分钟的事情,变成一个 3 秒钟执行完成的脚本。

七、总结

本文用一份完整代码演示了如何用 openpyxl 完成 excel 的生成、读取和修改。你可以把这个脚本当成模板,换成自己的业务字段,例如员工信息、订单数据、考勤记录、销售统计等。

掌握这些基础之后,再继续学习公式、图表、多文件合并、批量报表生成,python 处理 excel 的效率会非常明显。

以上就是python使用openpyxl生成、读取、修改excel的详细内容,更多关于python openpyxl操作excel的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com