如何借助OrderedDict遍历Excel所有工作表,读取各表B2单元格内容?
问题根源
你这段代码之所以只打印Leonardo,是因为wb = reference_workbook.active拿到的是工作簿里的活动工作表(也就是你最后打开的Sheet_3),循环的时候根本没切换到其他工作表,每次读的都是同一个Sheet_3的B2,自然只会重复输出同一个名字。
两种解决办法
办法一:用openpyxl直接遍历(适合只读指定单元格的场景)
不用引入pandas,直接用openpyxl遍历所有工作表,精准读取每个表的B2:
# 只导入需要的模块即可 from openpyxl import load_workbook file_path = r'C:/Users/machukovich/Desktop/stackoverflow.xlsx' # 加载工作簿 wb = load_workbook(file_path) # 遍历所有工作表 for sheet_name in wb.sheetnames: # 切换到当前工作表 current_sheet = wb[sheet_name] # 读取B2单元格的值 student_name = current_sheet['B2'].value print(f"工作表[{sheet_name}]的学生姓名: {student_name}") # 后续可在此添加判断逻辑,示例: # if student_name == "Roberto": # # 执行对应操作 # pass
办法二:结合pandas读取(适合后续要处理表中数据的场景)
如果之后还要用pandas处理工作表里的其他数据,可以这么写:
import pandas as pd file_path = r'C:/Users/machukovich/Desktop/stackoverflow.xlsx' # 读取所有工作表,不要跳过行(B2是第2行,pandas索引从0开始,对应iloc[1,1]) dict_of_df = pd.read_excel(file_path, sheet_name=None) for sheet_name, df in dict_of_df.items(): # 读取B2:iloc[行索引, 列索引],第2行对应索引1,B列对应索引1 student_name = df.iloc[1, 1] print(f"工作表[{sheet_name}]的学生姓名: {student_name}") # 示例判断逻辑 # if student_name == "Miquel Angelo": # # 执行对应操作 # pass
额外提醒
- 办法一更高效,因为不需要加载整个工作表的所有数据,只读取指定单元格;
- 办法二更适合后续需要对表内数据做分析、处理的场景;
- 注意:openpyxl的单元格行/列号从1开始计数,而pandas的iloc是从0开始的,别混淆索引。
内容的提问来源于stack exchange,提问作者machukovich
相关产品推荐
相关产品推荐

