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)三、参数说明
四、返回值
返回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
八、打开模式对比
九、小结
-
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_row和ws.max_column获取行列数,这些操作在只读模式下也非常快速。
keep_vba参数的作用是什么?
keep_vba=True可以在打开包含VBA宏的.xlsm文件时保留宏代码。默认情况下openpyxl会丢弃VBA代码。如果你只是读取或修改数据,不关心宏,使用默认值即可;如果需要保留宏代码以便后续保存,需要设置keep_vba=True。
本文涉及AI创作
内容由AI创作,请仔细甄别