Python操作Excel文档openpyxl库的功能介绍、使用和代码示例

文章目录

openpyxl 是 Python 中用于读写 Excel 2010 及以上版本(.xlsx/.xlsm 格式)的强大库,支持单元格数据操作、样式设置、公式计算、图表生成等功能,广泛用于自动化报表生成、数据导入导出等场景。它不支持旧版 .xls 格式(需用 xlrd/xlwt 库处理)。

一、核心功能

  1. 读写 Excel 文件:创建新工作簿、读取已有文件,支持单元格数据的读取和修改。
  2. 工作表操作:新增、删除、重命名工作表,切换活跃工作表。
  3. 单元格操作:通过坐标(如 A1)或行列号(如 row=1, column=1)访问单元格,支持数据类型(字符串、数字、日期等)。
  4. 样式设置:自定义单元格字体(大小、颜色、加粗)、对齐方式(居中、换行)、边框、填充色等。
  5. 高级功能:合并/取消合并单元格、插入公式(如求和、平均值)、遍历数据、设置行高列宽等。

二、安装

pip install openpyxl

三、基本使用与代码示例

示例 1:创建新工作簿并写入数据
from openpyxl import Workbook

# 1. 创建工作簿对象(默认包含一个名为 "Sheet" 的工作表)
wb = Workbook()

# 2. 获取活跃工作表(默认第一个工作表)
ws = wb.active
# 重命名工作表
ws.title = "学生成绩表"

# 3. 写入数据(两种方式:通过单元格坐标或行列号)
# 方式1:直接指定单元格坐标(如 A1, B1)
ws["A1"] = "学号"
ws["B1"] = "姓名"
ws["C1"] = "分数"

# 方式2:通过 row(行号)和 column(列号,从1开始)
ws.cell(row=2, column=1, value="001")  # 第2行第1列(A2)
ws.cell(row=2, column=2, value="张三")  # B2
ws.cell(row=2, column=3, value=95)      # C2

# 批量写入多行数据
data = [
    ("002", "李四", 88),
    ("003", "王五", 92),
    ("004", "赵六", 79)
]
for row in data:
    ws.append(row)  # append 会自动追加到下一行

# 4. 保存工作簿(若文件已存在,会覆盖)
wb.save("学生成绩.xlsx")
示例 2:读取已有 Excel 文件
from openpyxl import load_workbook

# 1. 加载已有工作簿(data_only=True 表示读取公式计算结果而非公式本身)
wb = load_workbook("学生成绩.xlsx", data_only=True)

# 2. 查看所有工作表名称
print("工作表列表:", wb.sheetnames)  # 输出:['学生成绩表']

# 3. 获取指定工作表(两种方式)
ws = wb["学生成绩表"]  # 方式1:通过名称
# ws = wb.active  # 方式2:获取活跃工作表

# 4. 读取单元格数据
print("A1 的值:", ws["A1"].value)  # 输出:学号
print("B2 的值:", ws.cell(row=2, column=2).value)  # 输出:张三

# 5. 遍历行数据(获取所有学生成绩)
print("\n所有学生数据:")
# iter_rows:从第2行到最后一行,第1列到第3列
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=1, max_col=3, values_only=True):
    # values_only=True 直接返回单元格值,否则返回 Cell 对象
    print(f"学号:{row[0]}, 姓名:{row[1]}, 分数:{row[2]}")

# 6. 关闭工作簿(非必须,但推荐)
wb.close()
示例 3:设置单元格样式(字体、对齐、边框)
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side

# 创建工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "样式示例"

# 定义样式
# 1. 字体:20号、加粗、蓝色
title_font = Font(size=20, bold=True, color="0000FF")  # 颜色用十六进制(RRGGBB)
# 2. 对齐:水平居中、垂直居中、自动换行
center_align = Alignment(horizontal="center", vertical="center", wrap_text=True)
# 3. 边框:细实线边框
thin_border = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="thin"),
    bottom=Side(style="thin")
)

# 应用样式到标题单元格
ws["A1"] = "带样式的标题"
ws["A1"].font = title_font
ws["A1"].alignment = center_align
ws["A1"].border = thin_border

# 合并单元格(A1到C1)
ws.merge_cells("A1:C1")

# 调整行高和列宽
ws.row_dimensions[1].height = 30  # 第1行行高
ws.column_dimensions["A"].width = 20  # A列列宽

# 保存文件
wb.save("样式示例.xlsx")
示例 4:使用公式与计算
from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "公式示例"

# 写入数据
ws["A1"] = "数值1"
ws["B1"] = "数值2"
ws["C1"] = "求和结果"

ws["A2"] = 10
ws["B2"] = 20
ws["A3"] = 30
ws["B3"] = 40

# 插入公式(注意:公式需用英文输入,与Excel中写法一致)
ws["C2"] = "=SUM(A2:B2)"  # 计算 A2+B2
ws["C3"] = "=A3+B3"       # 计算 A3+B3
ws["C4"] = "=AVERAGE(C2:C3)"  # 计算平均值

# 保存文件(此时用 Excel 打开会自动计算结果)
wb.save("公式示例.xlsx")

# 注意:若用 load_workbook 读取时,需设置 data_only=True 才能获取计算结果
# 但首次保存的文件未被 Excel 打开过,结果可能为 None,需用 Excel 打开后重新保存才会生效
示例 5:新增/删除工作表
from openpyxl import Workbook

wb = Workbook()
ws1 = wb.active
ws1.title = "表1"

# 新增工作表(插入到最后)
ws2 = wb.create_sheet(title="表2")
# 新增工作表(插入到最前面,index=0)
ws3 = wb.create_sheet(title="表3", index=0)

print("新增后工作表:", wb.sheetnames)  # 输出:['表3', '表1', '表2']

# 删除工作表
del wb["表3"]
print("删除后工作表:", wb.sheetnames)  # 输出:['表1', '表2']

wb.save("工作表操作.xlsx")

四、常见问题与注意事项

  1. 不支持 .xls 格式:仅处理 .xlsx/.xlsm,.xls 需用 xlrd(读)和 xlwt(写)。
  2. 公式计算load_workbook(data_only=True) 读取的是上次 Excel 计算的结果,若文件未被 Excel 打开过,可能返回 None
  3. 大型文件性能:处理十万行以上数据时,建议使用 read_only=True 模式加载工作簿,减少内存占用:
    wb = load_workbook("大型文件.xlsx", read_only=True)
    
  4. 样式复用:多次使用的样式建议定义为变量,避免重复创建(提高效率)。

五、总结

openpyxl 是处理 Excel 2010+ 文件的首选库,其核心优势在于:

  • 功能全面:支持数据读写、样式设置、公式、图表等几乎所有 Excel 操作。
  • 易用性:API 设计直观,通过对象(工作簿、工作表、单元格)层级操作,易于理解。
  • 灵活性:可用于自动化报表生成、数据清洗、批量处理等场景。

掌握 openpyxl 能极大提高 Excel 相关工作的效率,尤其适合需要批量处理大量表格数据的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值