Python中Excel文件的强大处理工具:OpenPyXL

什么是 OpenPyXL?

OpenPyXL 是一个用于读取、写入和修改 Excel 2010 及以上版本(.xlsx 格式)文件的 Python 库。它支持 .xlsx.xlsm 等基于 Office Open XML 标准的文件格式,但不支持旧版的 .xls(二进制格式)文件。

OpenPyXL 支持的功能包括:

  • 读取和写入单元格数据
  • 创建和修改工作表
  • 设置单元格样式(字体、颜色、边框等)
  • 插入图表、图片
  • 操作公式、合并单元格
  • 冻结窗格、设置列宽和行高

安装 OpenPyXL

使用 pip 命令安装 OpenPyXL 非常简单:

python 复制代码
pip install openpyxl

安装完成后,即可在 Python 脚本中导入并使用:

python 复制代码
import openpyxl

基本操作示例

1. 创建一个新的 Excel 文件

python 复制代码
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 文件

python 复制代码
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. 修改单元格与样式设置

python 复制代码
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. 创建多个工作表

python 复制代码
# 创建新的工作表
ws2 = wb.create_sheet("成绩表")

# 在新工作表中写入数据
ws2.append(['科目', '分数'])
ws2.append(['数学', 95])
ws2.append(['英语', 87])

wb.save('学生信息.xlsx')

5. 设置列宽与行高

python 复制代码
ws.column_dimensions['A'].width = 20
ws.row_dimensions[1].height = 30

实际应用案例:生成月度销售报表

假设我们有一组销售数据,希望自动生成一份格式美观的 Excel 报告。

python 复制代码
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("销售报表生成完成!")

注意事项与最佳实践

  1. 仅支持 .xlsx 文件 :如需处理 .xls 文件,请使用 xlrdpandas

  2. 内存占用 :对于超大文件,建议使用 read_only=Truewrite_only=True 模式以节省内存。

    python 复制代码
    wb = load_workbook('large_file.xlsx', read_only=True)
  3. 避免频繁保存 :多次调用 save() 会影响性能,建议在操作完成后一次性保存。

  4. 异常处理:在生产环境中应加入 try-except 来捕获文件不存在或权限错误等问题。


总结

OpenPyXL 是 Python 中处理 Excel 文件的强大工具,特别适合需要精细控制格式和样式的场景。无论是生成报表、批量处理数据,还是自动化办公任务,OpenPyXL 都能大大提升效率。

结合 Pandas(用于数据分析)和 OpenPyXL(用于格式化输出),你可以构建出功能强大且美观的数据处理流水线。

📌 推荐学习路径

  • 先掌握基本的读写操作
  • 学习样式设置与布局优化
  • 结合 Pandas 使用(df.to_excel() 默认使用 OpenPyXL 引擎)

参考资料

相关推荐
曲幽10 小时前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama
两万五千个小时14 小时前
落地实现 Anthropic Multi-Agent Research System
人工智能·python·架构
哈里谢顿16 小时前
Python 高并发服务限流终极方案:从原理到生产落地(2026 实战指南)
python
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng81 天前
Python+Django+H5+MySQL项目搭建
python·django
GinoWi1 天前
Chapter 2 - Python中的变量和简单的数据类型
python
JordanHaidee1 天前
Python 中 `if x:` 到底在判断什么?
后端·python
ServBay1 天前
10分钟彻底终结冗长代码,Python f-string 让你重获编程自由
后端·python
闲云一鹤1 天前
Python 入门(二)- 使用 FastAPI 快速生成后端 API 接口
python·fastapi
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek