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

参考资料

相关推荐
似水明俊德3 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
qq_417695053 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水3 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
Thera7774 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
yy我不解释4 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
炘爚5 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon5 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头5 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141595 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
Moksha2625 小时前
5G、VoNR基本概念
开发语言·5g·php