Python操作Excel – openpyxl

openpyxlPython 中用于读写 Excel(.xlsx / .xlsm)文件的主流库之一,不依赖 Microsoft Excel,本身是纯 Python 实现,常用于 数据处理、报表生成、自动化办公 等场景。


一、openpyxl 能做什么?

读取 / 写入 Excel 文件(.xlsx / .xlsm)
创建、删除、重命名工作表(Sheet)
读写单元格数据(支持公式)
设置样式(字体、颜色、对齐、边框)
合并单元格、冻结窗格、筛选
插入图片、图表(柱状图、折线图等)
操作行列(插入 / 删除 / 隐藏)

❌ 不支持旧格式 .xls(需要 xlrd / xlwt
❌ 不适合超大数据(几十万行以上性能会下降)


二、核心概念(很重要)

概念含义
Workbook整个 Excel 文件
Worksheet一个工作表(Sheet)
Cell单元格(如 A1)
Row / Column行 / 列
Style样式对象

结构关系:

Workbook
 ├── Worksheet (Sheet1)
 │     ├── Cell(A1)
 │     ├── Cell(B1)
 └── Worksheet (Sheet2)

三、安装

pip install openpyxl

四、基本用法示例

1️⃣ 创建 Excel 文件

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "Sheet1"

ws["A1"] = "Hello"
ws["B1"] = "openpyxl"

wb.save("example.xlsx")

2️⃣ 读取已有 Excel

from openpyxl import load_workbook

wb = load_workbook("example.xlsx")
ws = wb["Sheet1"]

print(ws["A1"].value)

3️⃣ 按行 / 列读取

for row in ws.iter_rows(min_row=1, max_col=2, max_row=5):
    for cell in row:
        print(cell.value)
for col in ws.iter_cols(min_col=1, max_col=2):
    for cell in col:
        print(cell.value)

4️⃣ 操作行和列

ws.append([1, 2, 3])       # 追加一行
ws.insert_rows(2)         # 插入行
ws.delete_cols(3)         # 删除列

五、样式设置(openpyxl 的强项)

字体 / 对齐 / 边框

from openpyxl.styles import Font, Alignment, Border, Side

ws["A1"].font = Font(bold=True, color="FF0000")
ws["A1"].alignment = Alignment(horizontal="center")

border = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="thin"),
    bottom=Side(style="thin"),
)
ws["A1"].border = border

设置列宽 / 行高

ws.column_dimensions["A"].width = 20
ws.row_dimensions[1].height = 30

六、合并单元格 & 冻结窗格

ws.merge_cells("A1:C1")
ws.freeze_panes = "A2"

七、公式 & 计算结果

ws["A1"] = 10
ws["A2"] = 20
ws["A3"] = "=SUM(A1:A2)"

⚠️ 注意:

  • openpyxl 不会计算公式
  • 读取公式结果需要 Excel 先计算并保存
load_workbook("file.xlsx", data_only=True)

八、插入图片

from openpyxl.drawing.image import Image

img = Image("logo.png")
ws.add_image(img, "C3")

九、图表(简单示例)

from openpyxl.chart import BarChart, Reference

data = Reference(ws, min_col=1, min_row=1, max_row=5)
chart = BarChart()
chart.add_data(data)
ws.add_chart(chart, "E5")

十、与 pandas 的关系(很常见的问题)

场景推荐
数据分析、清洗pandas
精细 Excel 格式openpyxl
pandas 写 Excel 后再美化pandas + openpyxl

示例:

import pandas as pd

df.to_excel("a.xlsx", engine="openpyxl")

然后再用 openpyxl 改样式。


十一、适用场景总结

✅ 自动生成报表
✅ 导出带格式的 Excel
✅ 运维 / 财务 / 统计报表
✅ 替代人工复制粘贴

❌ 海量数据处理
❌ 实时计算引擎


如果你愿意,我可以进一步给你:

  • 🔹 一个 完整的 Excel 报表示例
  • 🔹 openpyxl vs xlsxwriter 对比
  • 🔹 和 pandas 联合使用的实战模板
  • 🔹 常见坑位 & 性能优化

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注