You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Openpyxl技术问题:遍历Excel所有工作表读取B2单元格仅输出最后值

问题原因

你的代码只打印出Sheet_3的Leonardo,核心问题有两个:

  • wb = reference_workbook.active只会获取Excel当前激活的工作表(也就是最后一个Sheet_3),你只读取了这一个表的B2值,循环时反复输出同一个内容,根本没遍历其他工作表。
  • 用pandas加载时加了skiprows=2,会跳过前两行数据,导致完全读不到B2的内容,这部分属于多余操作。
修复方案

给你两种简单可行的实现方式:

方式一:用openpyxl直接操作单元格(推荐)

直接遍历所有工作表,逐个读取对应B2单元格:

import openpyxl

# 定义文件路径
file_path = r'C:/Users/machukovich/Desktop/stackoverflow.xlsx'

# 加载工作簿
wb = openpyxl.load_workbook(file_path)

# 遍历所有工作表
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    # 读取B2单元格内容并打印
    student_name = sheet['B2'].value
    print(student_name)

方式二:用pandas读取

利用pandas读取所有工作表后,定位到对应位置的数据(注意pandas行索引从0开始,Excel的B2对应第1行、第1列索引):

import pandas as pd

file_path = r'C:/Users/machukovich/Desktop/stackoverflow.xlsx'

# 读取所有工作表,返回字典(键是表名,值是对应DataFrame)
sheet_dict = pd.read_excel(file_path, sheet_name=None, header=None)

for _, df in sheet_dict.items():
    # 提取B2对应的数据并打印
    student_name = df.iloc[1, 1]
    print(student_name)
后续扩展

你可以在循环里直接加入条件判断逻辑,比如:

# 以openpyxl方式为例
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    student_name = sheet['B2'].value
    print(student_name)
    # 示例条件:如果是Leonardo,执行特定操作
    if student_name == 'Leonardo':
        print(f"处理{student_name}的相关数据")

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:02:42