Python中Excel文件的强大处理工具:OpenPyXL
什么是 OpenPyXL?
OpenPyXL 是一个用于读取、写入和修改 Excel 2010 及以上版本(.xlsx 格式)文件的 Python 库。它支持 .xlsx、.xlsm 等基于 Office Open XML 标准的文件格式,但不支持旧版的 .xls(二进制格式)文件。
OpenPyXL 支持的功能包括:
- 读取和写入单元格数据
- 创建和修改工作表
- 设置单元格样式(字体、颜色、边框等)
- 插入图表、图片
- 操作公式、合并单元格
- 冻结窗格、设置列宽和行高
安装 OpenPyXL
使用 pip 命令安装 OpenPyXL 非常简单:
pip install openpyxl
安装完成后,即可在 Python 脚本中导入并使用:
import openpyxl
基本操作示例
1. 创建一个新的 Excel 文件
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
ws = wb.active # 获取当前激活的工作表
# 写入数据
ws['A1'] = '姓名'
ws['B1'] = '年龄'
ws.append(['张三', 25])
ws.append(['李四', 30])
# 保存文件
wb.save('学生信息.xlsx')
print("Excel 文件已创建并保存!")
2. 读取现有 Excel 文件
from openpyxl import load_workbook
# 加载现有的 Excel 文件
wb = load_workbook('学生信息.xlsx')
ws = wb.active
# 读取 A1 单元格的内容
print(ws['A1'].value) # 输出:姓名
# 遍历所有行
for row in ws.iter_rows(values_only=True):
print(row)
输出结果:
('姓名', '年龄')
('张三', 25)
('李四', 30)
3. 修改单元格与样式设置
from openpyxl.styles import Font, Color, PatternFill
# 修改某个单元格的样式
cell = ws['A1']
cell.font = Font(bold=True, color="FF0000") # 粗体 + 红色文字
cell.fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # 黄色背景
# 合并单元格
ws.merge_cells('A1:B1')
ws['A1'] = '学生基本信息'
wb.save('学生信息.xlsx')
4. 创建多个工作表
# 创建新的工作表
ws2 = wb.create_sheet("成绩表")
# 在新工作表中写入数据
ws2.append(['科目', '分数'])
ws2.append(['数学', 95])
ws2.append(['英语', 87])
wb.save('学生信息.xlsx')
5. 设置列宽与行高
ws.column_dimensions['A'].width = 20
ws.row_dimensions[1].height = 30
实际应用案例:生成月度销售报表
假设我们有一组销售数据,希望自动生成一份格式美观的 Excel 报告。
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
# 模拟销售数据
sales_data = [
["产品", "销量", "单价", "总销售额"],
["手机", 120, 3000, 360000],
["平板", 80, 2000, 160000],
["耳机", 300, 200, 60000],
]
# 创建工作簿
wb = Workbook()
ws = wb.active
ws.title = "月度销售报表"
# 写入数据并设置标题样式
for row_idx, row_data in enumerate(sales_data, start=1):
for col_idx, value in enumerate(row_data, start=1):
cell = ws.cell(row=row_idx, column=col_idx, value=value)
# 设置标题行样式
if row_idx == 1:
cell.font = Font(bold=True, size=12)
cell.alignment = Alignment(horizontal="center")
# 自动调整列宽
for column in ws.columns:
max_length = 0
column_letter = column[0].column_letter
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = min(max_length + 2, 50)
ws.column_dimensions[column_letter].width = adjusted_width
# 保存文件
wb.save("月度销售报表.xlsx")
print("销售报表生成完成!")
注意事项与最佳实践
- 仅支持 .xlsx 文件:如需处理
.xls文件,请使用xlrd或pandas。 - 内存占用:对于超大文件,建议使用
read_only=True或write_only=True模式以节省内存。wb = load_workbook('large_file.xlsx', read_only=True) - 避免频繁保存:多次调用
save()会影响性能,建议在操作完成后一次性保存。 - 异常处理:在生产环境中应加入 try-except 来捕获文件不存在或权限错误等问题。
总结
OpenPyXL 是 Python 中处理 Excel 文件的强大工具,特别适合需要精细控制格式和样式的场景。无论是生成报表、批量处理数据,还是自动化办公任务,OpenPyXL 都能大大提升效率。
结合 Pandas(用于数据分析)和 OpenPyXL(用于格式化输出),你可以构建出功能强大且美观的数据处理流水线。
📌 推荐学习路径:
- 先掌握基本的读写操作
- 学习样式设置与布局优化
- 结合 Pandas 使用(
df.to_excel()默认使用 OpenPyXL 引擎)
参考资料:
- OpenPyXL 官方文档:https://openpyxl.readthedocs.io/
- GitHub 项目地址:https://github.com/openpyxl/openpyxl






