pin_drop当前位置:知识文库 ❯ 图文

Python openpyxl打开工作簿教程 - load_workbook使用详解

一、概述

load_workbook()是openpyxl打开已有Excel文件的核心函数,支持普通模式、只读模式和data_only模式。只读模式适合大文件读取,data_only模式读取公式计算后的值而非公式本身。打开工作簿后可以读取数据、修改内容并保存。


二、语法

代码示例

from openpyxl import load_workbook

wb = load_workbook('filename.xlsx', read_only=False, data_only=False)

三、参数说明

参数 类型 默认值 说明
filename str/file 必填 文件路径或文件对象
read_only bool False 只读模式(节省内存)
write_only bool False 只写模式
data_only bool False 只读取数据值(公式返回计算结果)
keep_vba bool False 保留VBA宏代码
keep_links bool True 保留外部链接
rich_text bool False 保留富文本格式

四、返回值

返回Workbook对象,包含文件中的所有工作表和数据。


五、代码示例

示例1:基本打开与读取

代码示例

from openpyxl import Workbook, load_workbook

# 先创建一个测试文件
wb = Workbook()
ws = wb.active
ws['A1'] = '姓名'
ws['B1'] = '年龄'
ws.append(['张三', 25])
ws.append(['李四', 30])
wb.save('test_load.xlsx')

# 打开已有文件
wb2 = load_workbook('test_load.xlsx')
ws2 = wb2.active

print(f"工作表名: {ws2.title}")
print(f"A1值: {ws2['A1'].value}")
print(f"B2值: {ws2['B2'].value}")
print(f"最大行: {ws2.max_row}")
print(f"最大列: {ws2.max_column}")

输出:

代码示例

工作表名: Sheet
A1值: 姓名
B2值: 25
最大行: 3
最大列: 2

示例2:data_only模式读取公式结果

代码示例

from openpyxl import Workbook, load_workbook

# 创建含公式的文件
wb = Workbook()
ws = wb.active
ws['A1'] = 10
ws['A2'] = 20
ws['A3'] = '=A1+A2'  # 公式
wb.save('formula_test.xlsx')

# 普通模式:读取公式
wb1 = load_workbook('formula_test.xlsx', data_only=False)
ws1 = wb1.active
print(f"data_only=False: A3 = {ws1['A3'].value}")

# data_only模式:读取计算结果
# 注意:需要先用Excel打开并保存过,data_only才能读到计算值
# 未用Excel保存过的文件,data_only模式下公式返回None
wb2 = load_workbook('formula_test.xlsx', data_only=True)
ws2 = wb2.active
print(f"data_only=True: A3 = {ws2['A3'].value}")

输出:

代码示例

data_only=False: A3 = =A1+A2
data_only=True: A3 = None

示例3:只读模式与遍历数据

代码示例

from openpyxl import Workbook, load_workbook

# 创建测试文件
wb = Workbook()
ws = wb.active
ws.append(['编号', '名称', '价格'])
for i in range(1, 6):
    ws.append([i, f'商品{i}', i * 10.5])
wb.save('readonly_test.xlsx')

# 只读模式打开
wb_ro = load_workbook('readonly_test.xlsx', read_only=True)
ws_ro = wb_ro.active

print("只读模式遍历数据:")
for row in ws_ro.iter_rows(values_only=True):
    print(f"  {row}")

# 查看工作表信息
print(f"\n工作表列表: {wb_ro.sheetnames}")
print(f"最大行: {ws_ro.max_row}")
print(f"最大列: {ws_ro.max_column}")

# 关闭只读工作簿(重要!)
wb_ro.close()
print("只读工作簿已关闭")

输出:

代码示例

只读模式遍历数据:
  ('编号', '名称', '价格')
  (1, '商品1', 10.5)
  (2, '商品2', 21.0)
  (3, '商品3', 31.5)
  (4, '商品4', 42.0)
  (5, '商品5', 52.5)

工作表列表: ['Sheet']
最大行: 6
最大列: 3
只读工作簿已关闭

六、实际应用场景

  • 数据分析:打开已有的Excel报表读取数据

  • 批量处理:使用只读模式快速遍历大文件数据

  • 报表更新:打开模板文件修改数据后另存为新文件


七、注意事项

注意:data_only=True读取公式结果需要文件曾被Excel打开并保存过,否则返回None

注意:只读模式打开的工作簿必须调用close()关闭,否则可能产生临时文件

注意load_workbook()只能打开.xlsx格式,不支持.xls


八、打开模式对比

模式 读取 写入 内存占用 速度 适用场景
默认 支持 支持 小文件读写
read_only 支持 不支持 大文件只读
data_only 支持 支持 读取公式结果

九、小结

  • load_workbook()打开已有Excel文件,返回Workbook对象

  • read_only=True适合大文件只读,节省内存但必须手动close()

  • data_only=True读取公式的计算结果而非公式文本

  • 打开后可通过sheetnames、active、max_row等属性了解文件结构


十、练习题

练习1

创建一个Excel文件并保存,然后用load_workbook()打开,打印所有单元格的值

练习2

创建一个含公式的Excel文件,分别用data_only=False和data_only=True打开,对比A3的值

练习3

使用read_only模式打开一个大Excel文件,遍历所有行数据,最后正确关闭工作簿

常见问题

为什么data_only=True读取公式返回None?

data_only模式读取的是Excel程序最后一次计算并保存的缓存值。如果文件只是通过openpyxl创建并保存,从未在Excel中打开过,则没有缓存的计算结果,因此返回None。解决方法是先用Excel打开该文件并保存,之后再用data_only=True读取就能获得公式计算结果。

read_only模式打开后忘记close()会有什么后果?

read_only模式会在系统的临时目录中创建解压后的临时文件。如果不调用close(),这些临时文件不会被清理,可能导致磁盘空间浪费。在Python上下文管理器中使用with语句可以自动关闭:with load_workbook(filename, read_only=True) as wb:

如何快速判断一个Excel文件有多少工作表和数据量?

使用read_only模式打开文件可以高效获取这些信息:wb.sheetnames获取工作表列表,ws.max_rowws.max_column获取行列数,这些操作在只读模式下也非常快速。

keep_vba参数的作用是什么?

keep_vba=True可以在打开包含VBA宏的.xlsm文件时保留宏代码。默认情况下openpyxl会丢弃VBA代码。如果你只是读取或修改数据,不关心宏,使用默认值即可;如果需要保留宏代码以便后续保存,需要设置keep_vba=True。

标签: openpyxl load_workbook 只读模式 data_only Excel文件读取 公式计算

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python openpyxl创建工作簿教程 - Workbook使用详解 下一篇: Python openpyxl工作表操作教程 - 创建删除复制冻结

poll相关推荐