读写 Excel
掌握
openpyxl操作 xlsx 文件的核心方法能实现 Excel 的读取、写入、修改、批量处理
了解大文件处理的性能优化方案
核心讲解
Python 操作 Excel 最常用的库是 openpyxl,专门处理 .xlsx 格式,功能全面,支持样式、公式、图表等。
(1)核心概念
工作簿(Workbook):一个 Excel 文件
工作表(Worksheet):文件里的 Sheet 页
单元格(Cell):行列交叉的格子,用列号 + 行号标识,比如 A1、B3
(2)写入 Excel 流程
创建工作簿:
Workbook()获取活动工作表:
wb.active写入单元格:
sheet["A1"] = 值或sheet.cell(row=1, column=1, value=值)保存文件:
wb.save("文件名.xlsx")
(3)读取 Excel 流程
加载工作簿:
load_workbook("文件名.xlsx")获取工作表:
wb["Sheet名"]或wb.active读取单元格:
sheet["A1"].value遍历行列:
sheet.iter_rows()按行遍历
(4)进阶操作
获取最大行列:
sheet.max_row、sheet.max_column批量写入:列表嵌套列表,逐行写入
单元格样式:字体、颜色、对齐、边框
公式:直接写入公式字符串,如
=SUM(A1:A10)
代码示例
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, Alignment, PatternFill
# ===== 1. 写入Excel =====
# 创建工作簿
wb = Workbook()
# 获取默认工作表
sheet = wb.active
# 修改工作表名
sheet.title = "学生成绩"
# 写入表头
headers = ["姓名", "语文", "数学", "英语", "总分"]
sheet.append(headers)
# 表头样式
header_font = Font(bold=True, color="FFFFFF")
header_fill = PatternFill("solid", fgColor="4472C4")
header_align = Alignment(horizontal="center")
for col in range(1, len(headers)+1):
cell = sheet.cell(row=1, column=col)
cell.font = header_font
cell.fill = header_fill
cell.alignment = header_align
# 批量写入数据
data = [
["张三", 90, 85, 92],
["李四", 78, 95, 88],
["王五", 82, 79, 90],
["赵六", 95, 88, 85]
]
for row in data:
# 计算总分公式
row.append(f"=SUM(B{sheet.max_row+1}:D{sheet.max_row+1})")
sheet.append(row)
# 调整列宽
sheet.column_dimensions["A"].width = 12
sheet.column_dimensions["E"].width = 10
# 保存文件
wb.save("学生成绩表.xlsx")
print("Excel创建完成")
# ===== 2. 读取Excel =====
# 加载文件
wb2 = load_workbook("学生成绩表.xlsx", data_only=True)
# data_only=True:读取公式计算后的值,而不是公式本身
sheet2 = wb2["学生成绩"]
print("\n读取Excel内容:")
# 遍历所有行
for row in sheet2.iter_rows(min_row=1, values_only=True):
print(row)
# 读取指定单元格
print("\n指定单元格:", sheet2["A2"].value)
print("最大行数:", sheet2.max_row)
print("最大列数:", sheet2.max_column)
# ===== 3. 修改Excel =====
wb3 = load_workbook("学生成绩表.xlsx")
sheet3 = wb3.active
# 修改单元格
sheet3["B2"] = 95
# 新增一行
sheet3.append(["钱七", 88, 92, 79, "=SUM(B6:D6)"])
wb3.save("学生成绩表_修改后.xlsx")
print("\nExcel修改完成")
常见误区
格式不兼容:openpyxl 只支持
.xlsx,不支持旧版.xls,xls 要用xlrd库公式读取不到值:不加
data_only=True读取的是公式字符串,不是计算结果忘记保存:所有修改都在内存中,必须调用
save()才会写入文件行号列号混淆:
cell(row, column)行和列都是从 1 开始的数字,不是从 0 开始大文件内存溢出:几十万行的大文件用普通方式会占大量内存,用
read_only=True只读模式
课后练习
创建一个 Excel 文件,写入 5 条商品信息(商品名、价格、库存、分类)
读取刚才创建的 Excel,计算所有商品的总库存
给 Excel 的价格列设置保留两位小数的数字格式
尝试批量读取一个文件夹下所有 Excel 文件的第一个 Sheet 数据

