你有没有遇到过这种情况:每个月要手动汇总十几个部门的 Excel 表格、给成绩单批量填颜色、统计一堆数据然后生成报表……一遍遍重复操作,枯燥又容易出错。
今天奥饼饼教大家用 Python 的 openpyxl 库,从读写单元格、批量修改格式,到自动合并汇总,彻底告别手动操作!
00
准备工作:安装 openpyxl
一行命令搞定
openpyxl 是 Python 处理 .xlsx 格式 Excel 文件的主流库,不依赖 Office,Windows / macOS / Linux 均可使用。
📦 安装
pip install openpyxl
# 验证安装
python-c"import openpyxl; print(openpyxl.__version__)"
01
读写单元格:基础操作
打开、读取、写入、保存
openpyxl 操作 Excel 的思路很直接:打开工作簿 → 选工作表 → 定位单元格 → 读或写 → 保存。就像你自己手动操作一样,只不过交给代码来做。
💻 读取 Excel 文件
import openpyxl
# 打开已有的 Excel 文件
wb = openpyxl.load_workbook('成绩表.xlsx')
# 选择第一个工作表
ws = wb.active
# 读取 A1 单元格的值
print(ws['A1'].value)
# 用行列坐标读取(第2行第3列)
print(ws.cell(row=2, column=3).value)
✏️ 写入并保存
# 新建工作簿
wb = openpyxl.Workbook()
ws = wb.active
# 写入表头
ws['A1'] = '姓名'
ws['B1'] = '成绩'
ws['C1'] = '等级'
# 批量写入数据
data = [('小明', 92), ('小红', 85), ('小华', 73)]
for row in data:
ws.append(row)
# 保存文件
wb.save('输出结果.xlsx')
💡 小贴士:ws.append(row) 可以直接把一整行列表/元组追加到表格末尾,批量写入时非常方便!
02
遍历行列:自动填写等级
根据成绩自动判断优良中差
有了一张成绩表,想在 C 列自动填写「优 / 良 / 中 / 差」?遍历每一行,读取 B 列分数,判断后写入 C 列,十几行代码就搞定,不管有多少条数据都能一键处理。
💻 自动填写等级
import openpyxl
wb = openpyxl.load_workbook('成绩表.xlsx')
ws = wb.active
# 从第2行开始(跳过表头),遍历所有数据行
for row in ws.iter_rows(min_row=2, values_only=False):
score = row[1].value # B列(索引1)
if score isNone:
continue
elif score >= 90:
level = '优'
elif score >= 75:
level = '良'
elif score >= 60:
level = '中'
else:
level = '差'
# 写入 C 列
row[2].value = level
wb.save('成绩表_等级.xlsx')
print('✅ 等级填写完成!')
03
批量设置样式:让表格好看起来
字体、颜色、对齐、列宽一键搞定
openpyxl 支持给单元格设置字体、背景色、对齐方式、列宽等样式,再也不用手动一个一个改格式了。
🎨 设置字体与背景色
from openpyxl.styles import Font, PatternFill, Alignment
# 给表头加粗 + 蓝色背景 + 白色字体
header_fill = PatternFill(fill_type='solid', fgColor='1a1a2e')
header_font = Font(bold=True, color='FFFFFF', size=12)
center_align = Alignment(horizontal='center', vertical='center')
for cell in ws[1]: # 第1行(表头)
cell.fill = header_fill
cell.font = header_font
cell.alignment = center_align
📐 设置列宽 & 行高
# 设置 A 列宽度为 15
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 10
# 设置第1行行高为 30
ws.row_dimensions[1].height = 30
wb.save('美化版表格.xlsx')
04
实战:批量合并多个 Excel 文件
十几个部门报表,一键汇总
每个月从各部门收到独立的 .xlsx 文件,需要合并到一张总表?下面这段代码自动读取某个文件夹下所有 Excel 文件,把数据全部汇总进一个工作表。
🔄 批量合并示例
import openpyxl
from pathlib import Path
# 新建汇总工作簿
merged = openpyxl.Workbook()
out_ws = merged.active
out_ws.title = '汇总'
header_written = False
# 读取 data/ 目录下所有 xlsx 文件
for f in Path('data').glob('*.xlsx'):
wb = openpyxl.load_workbook(f)
ws = wb.active
for i, row in enumerate(ws.iter_rows(values_only=True)):
# 只写一次表头
if i == 0and not header_written:
out_ws.append(row)
header_written = True
elif i > 0:
out_ws.append(row)
merged.save('汇总报表.xlsx')
print('✅ 合并完成!')
🚀 实际效果:把 data/ 文件夹里几十个部门报表全部合并进一张总表,不管有多少条数据,几秒搞定!
📋 openpyxl 常用操作速查
功能
代码示例
打开文件
wb = load_workbook('file.xlsx')
新建工作簿
wb = openpyxl.Workbook()
读取单元格
ws['A1'].value
写入单元格
ws['B2'] = '内容'
追加一行
ws.append([val1, val2, ...])
遍历所有行
ws.iter_rows(values_only=True)
设置列宽
ws.column_dimensions['A'].width = 15
保存文件
wb.save('output.xlsx')
🎯 今天的动手练习
练习 1:用 openpyxl 新建一个 Excel 文件,写入 5 位同学的姓名和成绩,然后自动填写等级列
练习 2:给生成的表格添加样式:表头深色背景、白色加粗字体、居中对齐
进阶挑战:创建 3 个不同班级的 xlsx 文件,用批量合并脚本把它们合并成一张总表,截图给奥饼饼看 😄
✍️ 小结
今天我们用 openpyxl 实现了四大实用功能:
这四个能力组合在一起,足以应对日常工作中 90% 的 Excel 自动化需求,快去实践起来吧!
🔮
下期预告
下期我们将介绍 「Git 入门:10 个最常用命令,让你的代码管理不再乱」——从 init、commit 到 branch、merge,搭配实际场景讲解,让零基础读者也能快速上手版本控制!
奥饼饼智慧谷 · 兴趣编程 & 技术软件分享
2026-04-22
#Python#自动化办公#Excel#openpyxl#兴趣编程