Openpyxl:Python操作Excel的利器

Excel作为最广泛使用的办公软件之一,其文件操作在数据处理中至关重要。Openpyxl正是Python生态中处理Excel文件的利器,专为读写.xlsx文件设计。本文将全面解析Openpyxl的核心功能与应用技巧。

一、简介与安装

Openpyxl 是一个纯Python库,支持读写.xlsx文件格式,无需安装Excel软件。主要特性包括:

  • 完整支持Excel公式、图表、样式设置
  • 内存优化处理大文件(>10MB)
  • 兼容Pandas等数据分析库
  • 支持数据验证、条件格式等高级功能

安装命令

bash 复制代码
pip install openpyxl

二、核心概念

  1. 工作簿(Workbook):整个Excel文件
  2. 工作表(Worksheet):工作簿中的单个Sheet
  3. 单元格(Cell):工作表的最小数据单元,通过行列坐标定位

三、基础操作

1. 创建工作簿
python 复制代码
from openpyxl import Workbook

# 创建新工作簿并激活默认工作表
wb = Workbook()
ws = wb.active  # 获取活动工作表
ws.title = "销售数据"  # 重命名工作表
2. 写入数据
python 复制代码
# 单单元格写入
ws['A1'] = "商品名称"
ws.cell(row=1, column=2, value="销售额")

# 批量写入(推荐高效方式)
data_rows = [
    ["手机", 1200000],
    ["笔记本", 980000],
    ["平板", 750000]
]
for row in data_rows:
    ws.append(row)  # 自动追加到末尾
3. 读取数据
python 复制代码
# 单单元格读取
value = ws['A2'].value)  # 输出:手机

# 遍历区域(B1到B3)
for cell in ws['B1':'B3']:
    print(cell[0].value)  # 输出销售额数值

# 按行遍历
for row in ws.iter_rows(min_row=1, values_only=True):
    print(row)  # 输出每行元组
4. 保存文件
python 复制代码
wb.save("sales_report.xlsx")  # 保存为新文件
5. 工作表操作

新增、重命名与删除

python 复制代码
ws1 = wb.create_sheet("新表单")
ws1.title = "销售数据"

# 删除工作表
del wb["Sheet"]

# 获取所有表名
print(wb.sheetnames)

四、进阶功能实战

1. 样式设置

openpyxl 支持对字体、填充、边框、对齐等样式进行设置。

python 复制代码
from openpyxl.styles import Font, Alignment, Border,  PatternFill, Side

# 设置字体、颜色
header_font = Font(name='Arial', size=12, bold=True, color="FFFFFF")

# 设置单元格背景色
header_fill = PatternFill(start_color="3366FF", end_color="3366FF", fill_type="solid")

# 设置边框
border = Border(bottom=Side(style="thick"))

# 设置居中对齐
for cell in ws[1]:  # 第一行
    cell.font = header_font
    cell.fill = header_fill
    cell.border = border
    cell.alignment = Alignment(horizontal="center", vertical="center")
2. 公式计算

注意:openpyxl 不会计算公式,只能写入/读取公式。要计算结果需要在 Excel 中打开。

python 复制代码
# 在B5单元格添加求和公式
ws['B5'] = "=SUM(B2:B4)"

# 读取公式结果(需手动计算)
print(ws['B5'].value)  # 输出公式文本

print(ws['B5'].value)  # 输出计算结果(需设置data_only=True打开)
  • 想获得公式,data_only=False
  • 想获得计算结果,data_only=True
  • 想同时获得两者,需要两次加载(两个 Workbook 实例)
3. 合并、拆分单元格
python 复制代码
# 合并A1到C1为一个单元格
ws.merge_cells('A1:C1')
ws['A1'] = "2023年度销售报告"

# 拆分单元格
ws.unmerge_cells('A1:C1')
4. 数据筛选与排序
python 复制代码
# 添加筛选器
ws.auto_filter.ref = "A1:B4"

# 按销售额降序排序
ws.sort_values(by="B", ascending=False)
5. 插入图片和图表

插入图片

python 复制代码
from openpyxl.drawing.image import Image

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

插入柱状图

python 复制代码
from openpyxl.chart import BarChart, Reference

# 准备数据
for i in range(1, 6):
    ws.append([i, i * 10])

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

五、高效处理大型文件

当处理>10MB文件时,如果你只需要读取不需要修改,可以使用 read_only=True:

python 复制代码
# 启用只读模式(内存优化)
from openpyxl import load_workbook
wb = load_workbook('large_file.xlsx', read_only=True)

对于写入大量数据,使用 write_only=True 模式:

python 复制代码
# 启用只写模式
wb = Workbook(write_only=True)
ws = wb.create_sheet()

# 分批写入数据
for row in large_data_set:
    ws.append(row)
    
wb.save("big.xlsx")

六、完整示例:销售报告生成器

python 复制代码
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment

# 初始化工作簿
wb = Workbook()
ws = wb.active
ws.title = "销售汇总"

# 构建表头
headers = ["产品", "季度1", "季度2", "季度3", "季度4", "年度总计"]
ws.append(headers)

# 设置标题样式
for col in range(1, 7):
    cell = ws.cell(row=1, column=col)
    cell.font = Font(bold=True)
    cell.alignment = Alignment(horizontal='center')

# 填充数据
sales_data = [
    ["手机", 300, 420, 380, 500],
    ["平板", 150, 180, 210, 240],
    ["电脑", 200, 230, 250, 280]
]

for data in sales_data:
    ws.append(data + [f"=SUM(B{ws.max_row}:E{ws.max_row})"])

# 添加格式
for row in ws.iter_rows(min_row=2, max_col=6):
    for cell in row:
        if cell.column_letter == 'F':  # 年度列特殊格式
            cell.font = Font(color="FF0000", bold=True)

# 保存文件
wb.save("年度销售报告.xlsx")

七、注意事项

  1. 文件格式 :仅支持.xlsx,不支持旧版.xls
  2. 公式计算 :打开文件时需设置data_only=True获取计算结果
  3. 性能优化 :大文件处理使用read_only/write_only模式
  4. 样式复制 :使用copy()方法复制单元格样式
  5. 日期处理 :Excel日期是数字,需用number_format设置格式

openpyxl 是处理 .xlsx 文件的首选工具,它功能强大、文档完善,适合自动化办公、报表生成和数据处理等各种任务。日常操作优先使用Pandas进行数据处理,在需要精细控制样式/公式等Excel特性时再使用Openpyxl直接操作,更能发挥强大的数据处理能力。

相关推荐
lancyu7 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗8 小时前
Claude 使用指南
开发语言·python
工具分享8 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI8 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造8 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏8 小时前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
230万光年的思念9 小时前
分子动力学模拟参考文献
python
HongXu_CaiYi9 小时前
0103-python相关-函数、文件
python
vortex510 小时前
从Conda到UV:Python项目依赖管理的现代演进
python·conda·uv
何以解忧,唯有..11 小时前
Python time 模块详解:时间处理与日期操作指南
开发语言·python