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 引擎)

参考资料

相关推荐
2401_8685347817 小时前
校园网规划与设计
python·pygame
小猴子爱上树18 小时前
跨境电商AI批量图片翻译工具,视频字幕翻译免费试用
人工智能·python·音视频
开开心心就好18 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
zx_7414848118 小时前
【Python入门】爬虫实战:Requests + XPath 从基础到实战
开发语言·爬虫·python
高洁0118 小时前
Teacher Forcing技术解析
人工智能·python·深度学习·transformer·知识图谱
2601_9620652518 小时前
从零创建一个 Django 项目
后端·python·django
吴声子夜歌18 小时前
Java——开发中通用的方法和准则(二)
java·开发语言·php
江屿风18 小时前
C++OJ题经验总结(竞赛)5
开发语言·c++
溪语流沙18 小时前
【Python项目实战】虚拟环境与依赖管理:venv / pip / requirements.txt实操
开发语言·python·pip
神威难绷泪18 小时前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程