Python的openpyxl库是处理Excel文件的常用工具,支持xlsx格式文件的读写、样式修改、公式计算等多种操作,能够满足日常数据处理的大部分需求。下面将从基础操作到高级技巧逐步展开介绍。

openpyxl基础环境准备
首先需要安装openpyxl库,使用pip命令即可完成安装:
# 安装openpyxl库 pip install openpyxl
安装完成后,就可以在Python脚本中导入库并开始操作Excel文件了。
基础读写操作
创建新的Excel文件
使用openpyxl创建新的Excel文件非常简单,只需要实例化Workbook对象即可:
from openpyxl import Workbook
# 创建Workbook对象,默认会生成一个名为Sheet的工作表
wb = Workbook()
# 获取活动的工作表
ws = wb.active
# 给工作表重命名
ws.title = "数据表"
# 写入数据到A1单元格
ws["A1"] = "姓名"
ws["B1"] = "年龄"
ws["A2"] = "张三"
ws["B2"] = 25
# 保存文件
wb.save("测试数据.xlsx")
读取已有Excel文件
如果需要读取已经存在的Excel文件,可以使用load_workbook方法:
from openpyxl import load_workbook
# 加载已有的Excel文件
wb = load_workbook("测试数据.xlsx")
# 获取指定名称的工作表
ws = wb["数据表"]
# 读取A1单元格的内容
print(ws["A1"].value) # 输出:姓名
# 遍历第一行的所有单元格
for cell in ws[1]:
print(cell.value)
openpyxl高级操作技巧
单元格样式设置
openpyxl支持设置单元格的字体、颜色、对齐方式、边框等多种样式,以下是设置单元格样式的示例:
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
wb = Workbook()
ws = wb.active
ws.title = "样式示例"
# 设置字体:加粗、红色、14号字
font = Font(bold=True, color="FF0000", size=14)
# 设置背景填充:黄色
fill = PatternFill(fill_type="solid", fgColor="FFFF00")
# 设置对齐方式:水平居中、垂直居中
alignment = Alignment(horizontal="center", vertical="center")
# 设置边框:细黑色边框
side = Side(style="thin", color="000000")
border = Border(left=side, right=side, top=side, bottom=side)
# 将样式应用到A1单元格
ws["A1"] = "样式测试"
ws["A1"].font = font
ws["A1"].fill = fill
ws["A1"].alignment = alignment
ws["A1"].border = border
# 调整列宽和行高
ws.column_dimensions["A"].width = 20
ws.row_dimensions[1].height = 30
wb.save("样式示例.xlsx")
公式与函数使用
openpyxl支持在单元格中写入Excel公式,保存后打开文件会自动计算结果:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "公式计算"
# 写入基础数据
ws["A1"] = 10
ws["A2"] = 20
ws["A3"] = 30
# 写入求和公式
ws["A4"] = "=SUM(A1:A3)"
# 写入平均值公式
ws["B1"] = "=AVERAGE(A1:A3)"
wb.save("公式计算示例.xlsx")
生成图表
openpyxl可以基于工作表中的数据生成柱状图、折线图等多种图表,以下是生成柱状图的示例:
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook()
ws = wb.active
ws.title = "图表示例"
# 写入数据
ws["A1"] = "月份"
ws["B1"] = "销售额"
data = [
("一月", 1000),
("二月", 1500),
("三月", 1200),
("四月", 1800),
("五月", 2000)
]
for i, (month, sales) in enumerate(data, start=2):
ws[f"A{i}"] = month
ws[f"B{i}"] = sales
# 创建柱状图
chart = BarChart()
chart.title = "月度销售额"
chart.x_axis.title = "月份"
chart.y_axis.title = "销售额"
# 设置图表数据范围
data_ref = Reference(ws, min_col=2, min_row=1, max_row=6)
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=6)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
# 将图表添加到工作表的E1位置
ws.add_chart(chart, "E1")
wb.save("图表示例.xlsx")
多工作表操作
当需要操作多个工作表时,可以通过以下方式实现创建、切换、复制工作表等操作:
from openpyxl import Workbook
wb = Workbook()
# 删除默认的工作表
del wb["Sheet"]
# 创建三个新的工作表
ws1 = wb.create_sheet("第一季度")
ws2 = wb.create_sheet("第二季度")
ws3 = wb.create_sheet("第三季度")
# 给每个工作表写入表头
for ws in [ws1, ws2, ws3]:
ws["A1"] = "产品"
ws["B1"] = "销量"
# 复制工作表
ws_copy = wb.copy_worksheet(ws1)
ws_copy.title = "第一季度副本"
# 获取所有工作表名称
print(wb.sheetnames) # 输出:['第一季度', '第二季度', '第三季度', '第一季度副本']
wb.save("多工作表示例.xlsx")
批量处理数据
当需要处理大量数据时,可以通过循环遍历的方式批量操作单元格,提升处理效率:
from openpyxl import load_workbook
# 加载文件
wb = load_workbook("多工作表示例.xlsx")
ws = wb["第一季度"]
# 批量写入10条数据
for i in range(2, 12):
ws[f"A{i}"] = f"产品{i-1}"
ws[f"B{i}"] = i * 100
# 批量读取数据
for row in ws.iter_rows(min_row=2, max_row=11, min_col=1, max_col=2):
product = row[0].value
sales = row[1].value
print(f"{product}的销量是{sales}")
wb.save("多工作表示例.xlsx")
注意事项
- openpyxl不支持xls格式的Excel文件,如果需要处理xls格式,可以使用xlrd库读取,xlwt库写入。
- 写入公式后,只有通过Excel软件打开文件时公式才会计算,openpyxl本身不会计算公式结果。
- 操作大文件时,建议使用read_only模式读取,write_only模式写入,减少内存占用。
- 修改已有文件时,保存的路径如果和原文件路径一致,会直接覆盖原文件,建议先备份原文件。