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
相关产品推荐
相关产品推荐

