当前位置: 代码网 > it编程>前端脚本>Python > Python使用openpyxl处理Excel文件的操作指南

Python使用openpyxl处理Excel文件的操作指南

2026年04月21日 Python 我要评论
什么是 openpyxl?openpyxl 是 python 中用于读写 excel 文件(.xlsx 格式)的第三方库。它能让您用 python 程序自动处理 excel 文件,比如:批量读取数据自

什么是 openpyxl?

openpyxl 是 python 中用于读写 excel 文件(.xlsx 格式)的第三方库。它能让您用 python 程序自动处理 excel 文件,比如:

  • 批量读取数据
  • 自动生成报表
  • 修改表格格式
  • 合并多个 excel 文件

主要功能

  • ✅ 读取和写入 .xlsx 文件
  • ✅ 操作工作表和单元格
  • ✅ 设置样式和格式(字体、颜色、边框等)
  • ✅ 插入图表和公式
  • ✅ 处理大文件(支持只读模式)

应用场景

  • 数据处理:批量读取 excel 数据进行分析
  • 报表生成:自动生成格式化的 excel 报表
  • 数据迁移:在不同系统间转换数据格式
  • 自动化办公:替代重复的手工 excel 操作

基本概念

在开始示例之前,先了解几个重要概念:

1. 工作簿和工作表

  • 工作簿(workbook):整个 excel 文件,相当于一个容器
  • 工作表(worksheet):工作簿中的单个表格,可以有多个

2. 单元格定位

  • a1 表示法:用列字母+行数字定位,如 a1b2
  • 坐标表示法:用行列数字定位,如 (1, 1) 表示第1行第1列

3. 常用方法参数

方法/参数说明示例
load_workbook()打开已存在的文件wb = load_workbook('file.xlsx')
workbook()创建新工作簿wb = workbook()
active获取当前活动工作表ws = wb.active
cell(row, column)通过坐标访问单元格ws.cell(1, 1)
['a1']通过 a1 表示法访问ws['a1']
.value获取/设置单元格值cell.value = 'hello'
save()保存文件wb.save('output.xlsx')

4. 样式相关

  • font:字体(大小、颜色、粗体等)
  • patternfill:填充颜色
  • border:边框
  • alignment:对齐方式

入门示例

示例 1:创建第一个 excel 文件

目标:创建一个新的 excel 文件,并写入一些数据。

提示:这是最基础的例子。首先需要安装 openpyxl(pip install openpyxl),然后创建 workbook 对象,获取工作表,写入数据,最后保存。

from openpyxl import workbook

# 第 1 步:创建新工作簿
wb = workbook()

# 第 2 步:获取活动工作表(默认创建的第一个工作表)
ws = wb.active

# 第 3 步:设置工作表名称
ws.title = "我的数据"

# 第 4 步:写入数据(使用 a1 表示法)
ws['a1'] = '姓名'
ws['b1'] = '年龄'
ws['a2'] = '张三'
ws['b2'] = 25

# 第 5 步:保存文件
wb.save('示例.xlsx')
print("文件已创建!")

运行效果

  • 会在当前目录生成 示例.xlsx 文件
  • a1 单元格为"姓名",b1 为"年龄"
  • a2 单元格为"张三",b2 为 25

关键要点

  • 使用 workbook() 创建新文件
  • active 获取默认工作表
  • 通过 ['a1'] 访问单元格
  • 必须调用 save() 才能保存文件

示例 2:读取现有文件

目标:打开一个已存在的 excel 文件,读取其中的数据。

提示:使用 load_workbook() 打开文件。注意文件路径要正确,如果文件不存在会报错。

from openpyxl import load_workbook

# 打开已存在的文件
wb = load_workbook('示例.xlsx')

# 获取工作表(通过名称)
ws = wb['我的数据']

# 读取单元格值
name = ws['a1'].value
age = ws['b1'].value

print(f"a1 的值:{name}")
print(f"b1 的值:{age}")

# 读取 a2 和 b2
print(f"姓名:{ws['a2'].value}, 年龄:{ws['b2'].value}")

运行效果

a1 的值:姓名
b1 的值:年龄
姓名:张三, 年龄:25

关键要点

  • load_workbook() 用于打开已存在的文件
  • 通过工作表名称 wb['工作表名'] 获取工作表
  • .value 获取单元格的值

示例 3:使用坐标方式访问单元格

目标:学习用行列数字(坐标)的方式访问单元格,这在循环中更方便。

提示cell(row, column) 方法用数字定位,row 和 column 都从 1 开始。这种方式在批量操作时比 a1 表示法更方便。

from openpyxl import workbook

wb = workbook()
ws = wb.active

# 写入表头
ws.cell(1, 1, '产品')  # 第1行第1列
ws.cell(1, 2, '价格')  # 第1行第2列
ws.cell(1, 3, '数量')  # 第1行第3列

# 写入数据
ws.cell(2, 1, '苹果')
ws.cell(2, 2, 5.5)
ws.cell(2, 3, 10)

ws.cell(3, 1, '香蕉')
ws.cell(3, 2, 3.2)
ws.cell(3, 3, 20)

wb.save('商品清单.xlsx')
print("文件已创建!")

运行效果

  • 创建包含 3 列数据的表格
  • 第1行是表头,第2-3行是数据

关键要点

  • cell(row, column, value) 三个参数:行、列、值
  • 也可以先获取单元格再赋值:ws.cell(1, 1).value = '产品'
  • 坐标从 1 开始,不是 0

示例 4:批量写入数据

目标:使用循环批量写入多行数据,这是实际应用中最常见的场景。

提示:结合 python 的循环和列表,可以高效地批量写入数据。注意行号从 1 开始,通常第 1 行是表头。

from openpyxl import workbook

wb = workbook()
ws = wb.active

# 表头
headers = ['姓名', '部门', '工资']
for col, header in enumerate(headers, start=1):
    ws.cell(1, col, header)

# 数据列表
employees = [
    ['张三', '技术部', 8000],
    ['李四', '销售部', 6000],
    ['王五', '人事部', 5500],
    ['赵六', '技术部', 9000],
]

# 批量写入数据
for row, employee in enumerate(employees, start=2):  # 从第2行开始
    for col, value in enumerate(employee, start=1):
        ws.cell(row, col, value)

wb.save('员工信息.xlsx')
print(f"已写入 {len(employees)} 条员工数据")

运行效果

  • 创建包含 4 名员工信息的表格
  • 第1行是表头,第2-5行是员工数据

关键要点

  • enumerate(start=1) 从指定数字开始计数
  • 外层循环控制行,内层循环控制列
  • 表头通常在第1行,数据从第2行开始

示例 5:读取整个表格

目标:读取 excel 文件中的所有数据,并打印出来。

提示:使用 max_rowmax_column 获取工作表的行列范围,然后循环读取所有单元格。这是读取整个表格的标准方法。

from openpyxl import load_workbook

wb = load_workbook('员工信息.xlsx')
ws = wb.active

# 获取表格的最大行数和列数
max_row = ws.max_row
max_column = ws.max_column

print(f"表格大小:{max_row} 行 × {max_column} 列\n")

# 读取所有数据
for row in range(1, max_row + 1):
    row_data = []
    for col in range(1, max_column + 1):
        cell_value = ws.cell(row, col).value
        row_data.append(cell_value)
    print(row_data)

运行效果

表格大小:5 行 × 3 列

['姓名', '部门', '工资']
['张三', '技术部', 8000]
['李四', '销售部', 6000]
['王五', '人事部', 5500]
['赵六', '技术部', 9000]

关键要点

  • max_rowmax_column 获取实际使用的行列数
  • range(1, max_row + 1) 包含最后一行
  • 空单元格的值为 none

示例 6:设置单元格样式

目标:给表格添加样式,让表头更醒目(加粗、背景色)。

提示:openpyxl 的样式功能很强大。需要导入 font(字体)和 patternfill(填充)。样式需要赋值给单元格的 fontfill 属性。

from openpyxl import workbook
from openpyxl.styles import font, patternfill, alignment

wb = workbook()
ws = wb.active

# 写入表头
headers = ['姓名', '分数', '等级']
for col, header in enumerate(headers, start=1):
    cell = ws.cell(1, col, header)
    
    # 设置字体:加粗、白色、14号
    cell.font = font(bold=true, color='ffffff', size=14)
    
    # 设置背景色:蓝色
    cell.fill = patternfill(start_color='4472c4', end_color='4472c4', fill_type='solid')
    
    # 设置对齐:居中
    cell.alignment = alignment(horizontal='center', vertical='center')

# 写入数据
data = [
    ['张三', 95, '优秀'],
    ['李四', 78, '良好'],
    ['王五', 65, '及格'],
]

for row, row_data in enumerate(data, start=2):
    for col, value in enumerate(row_data, start=1):
        ws.cell(row, col, value)

# 调整列宽(让内容显示完整)
ws.column_dimensions['a'].width = 12
ws.column_dimensions['b'].width = 10
ws.column_dimensions['c'].width = 10

wb.save('成绩单.xlsx')
print("带样式的文件已创建!")

运行效果

  • 表头为蓝色背景、白色加粗字体、居中
  • 数据行保持默认样式
  • 列宽自动调整

关键要点

  • font() 设置字体样式(bold、color、size)
  • patternfill() 设置背景色(颜色用十六进制代码)
  • alignment() 设置对齐方式
  • column_dimensions 调整列宽

示例 7:实战应用 - 数据统计

目标:读取员工数据,按部门统计平均工资,并生成新的报表。

提示:这是一个综合示例,结合了读取、处理、写入和样式设置。实际项目中的 openpyxl 使用就是这样的结构。

from openpyxl import load_workbook, workbook
from openpyxl.styles import font, patternfill

# 读取原始数据
wb = load_workbook('员工信息.xlsx')
ws = wb.active

# 统计各部门工资
departments = {}
for row in range(2, ws.max_row + 1):  # 跳过表头
    dept = ws.cell(row, 2).value  # 部门在第2列
    salary = ws.cell(row, 3).value  # 工资在第3列
    
    if dept not in departments:
        departments[dept] = []
    departments[dept].append(salary)

# 创建统计报表
wb_new = workbook()
ws_new = wb_new.active
ws_new.title = "部门统计"

# 写入表头
ws_new['a1'] = '部门'
ws_new['b1'] = '人数'
ws_new['c1'] = '平均工资'

# 设置表头样式
header_fill = patternfill(start_color='4472c4', end_color='4472c4', fill_type='solid')
header_font = font(bold=true, color='ffffff')

for col in ['a1', 'b1', 'c1']:
    cell = ws_new[col]
    cell.fill = header_fill
    cell.font = header_font

# 写入统计数据
row = 2
for dept, salaries in departments.items():
    ws_new.cell(row, 1, dept)
    ws_new.cell(row, 2, len(salaries))
    avg_salary = sum(salaries) / len(salaries)
    ws_new.cell(row, 3, round(avg_salary, 2))
    row += 1

wb_new.save('部门统计.xlsx')
print("统计报表已生成!")

运行效果

  • 读取员工信息.xlsx
  • 按部门统计人数和平均工资
  • 生成新的统计报表文件

关键要点

  • 实际应用会结合数据处理逻辑
  • 可以读取一个文件,生成另一个文件
  • 样式让报表更专业

其他选择

xlrd / xlwt - 老式库

用于处理 .xls 格式(旧版 excel):

import xlrd
wb = xlrd.open_workbook('file.xls')

适用场景:需要处理旧版 excel 文件(.xls)

pandas - 数据分析

pandas 也可以读写 excel,更适合数据分析:

import pandas as pd
df = pd.read_excel('file.xlsx')
df.to_excel('output.xlsx')

适用场景:数据分析、处理表格数据

xlsxwriter - 只写模式

只能写入,不能读取,但性能更好:

import xlsxwriter
wb = xlsxwriter.workbook('file.xlsx')

适用场景:只需要生成 excel 文件,不需要读取

如何选择?

场景推荐
读写 .xlsx 文件openpyxl
数据分析处理pandas
只生成文件xlsxwriter
处理旧版 .xlsxlrd / xlwt

openpyxl 的优势

  • ✅ 功能完整,读写都支持
  • ✅ 支持样式、图表等高级功能

总结:openpyxl 是处理 excel 文件的标准方案。掌握本文的 7 个示例,就能处理绝大多数日常需求。

以上就是python使用openpyxl处理excel文件的操作指南的详细内容,更多关于python openpyxl处理excel文件的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com