You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Openpyxl读取指定工作表(而非默认活动工作表)及多工作表数据?

如何用Openpyxl读取Excel的多个工作表

嘿,我来帮你搞定这个问题!你之前碰到的wb.active不生效的情况挺常见的,其实active属性主要是用来设置保存工作簿时哪个工作表处于激活状态,而非直接切换读取目标工作表。下面给你两种更可靠的方法,完全不用手动切换激活状态:

方法一:通过工作表名称读取(推荐)

这是最稳妥的方式,工作表名称一般固定,不会因为表的顺序变动而出错。你只需要用方括号包裹工作表名称就能直接获取:

from openpyxl import load_workbook

wb = load_workbook('Test.xlsx')
# 通过名称精准获取工作表
ws1 = wb['Sheet1']  # 替换成你实际的第一个工作表名称
ws2 = wb['Sheet2']  # 替换成你实际的第二个工作表名称

# 示例:读取A1单元格内容
print(ws1['A1'].value)
print(ws2['A1'].value)

注意:如果工作表名称带空格或特殊字符,用属性访问(比如wb.Sheet1)可能会报错,所以优先用方括号的方式更稳妥。

方法二:通过工作表位置(索引)读取

要是你不知道工作表名称,或者想按顺序读取,可以用worksheets属性——它会返回所有工作表的列表,索引从0开始:

from openpyxl import load_workbook

wb = load_workbook('Test.xlsx')
# 第一个工作表(索引0)
ws1 = wb.worksheets[0]
# 第二个工作表(索引1)
ws2 = wb.worksheets[1]

# 示例:逐行读取表中数据
for row in ws1.iter_rows(values_only=True):
    print(row)

为什么之前的wb.active = 1没生效?

简单说,wb.active = 1只是告诉Openpyxl「保存工作簿时把索引为1的表设为活动表」,但它不会直接让ws = wb.active变成这个表——你得在设置后重新调用wb.active才能获取到目标表:

wb = load_workbook('Test.xlsx')
wb.active = 1  # 设置索引1的表为活动表
ws2 = wb.active  # 现在ws2才是第二个工作表

不过这种方式不如直接用名称或索引直观,所以不推荐作为读取多表的常规方法。

额外小技巧:遍历所有工作表

如果你的Excel里有多个工作表想批量处理,可以直接遍历wb.worksheets

for sheet in wb.worksheets:
    print(f"正在处理工作表:{sheet.title}")
    # 在这里编写你的处理逻辑

内容的提问来源于stack exchange,提问作者Tami

火山引擎 最新活动