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

参考资料

相关推荐
天若有情6738 分钟前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
好家伙VCC12 分钟前
**发散创新:基于Python与ROS的机器人运动控制实战解析**在现代机器人系统开发中,**运动控制**是实现智能行为的核心
java·开发语言·python·机器人
2401_8274999912 分钟前
python项目实战09-AI智能伴侣(ai_partner_2-3)
开发语言·python
派葛穆14 分钟前
汇川PLC-Python与汇川easy521plc进行Modbustcp通讯
开发语言·python
代码小书生41 分钟前
Matplotlib,Python 数据可视化核心库!
python·信息可视化·matplotlib
lzhdim1 小时前
SharpCompress:跨平台的 C# 压缩与解压库
开发语言·c#
嘿嘿嘿x31 小时前
Linux记录过程
linux·开发语言
默 语1 小时前
Records、Sealed Classes这些新特性:Java真的变简单了吗?
java·开发语言·python
架构师老Y1 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
止观止1 小时前
拥抱 ESNext:从 TC39 提案到生产环境中的现代 JS
开发语言·javascript·ecmascript·esnext