在
ordereddict
的上下文中,我想循环遍历 Excel 文件中的所有工作表,从每个工作表中读取 B2 单元格的内容,然后将其打印出来。稍后,我计划根据该单元格的字符串值设置条件。
# Importing modules
import openpyxl as op
import pandas as pd
import numpy as np
import xlsxwriter
import openpyxl
from openpyxl import Workbook, load_workbook
# Defining the file path
file_path = r'C:/Users/machukovich/Desktop/stackoverflow.xlsx'
# Load workbook as openpyxl
reference_workbook = load_workbook(file_path)
# We will mantain the workbook open
wb = reference_workbook.active
# Loading the file into a dictionary of Dataframes
dict_of_df = pd.read_excel(file_path, sheet_name=None, skiprows=2)
# Writting the loop itself (it only prints Leonardo)
for sheet_name, df in dict_of_df.items():
student_name = wb['B2'].value
print(f"Student Name: {student_name}")
来自 https://openpyxl.readthedocs.io/en/stable/tutorial.html#create-a-workbook :
工作簿始终至少包含一个工作表。您可以通过使用 Workbook.active 属性来获取它:
ws = wb.active
信息:默认设置为 0。除非您修改其值,否则使用此方法您将始终获得第一个工作表。
您永远不会更改
reference_workbook.active
并且 wb
始终是工作簿的第一个工作表。然后,此外,您还可以使用 pandas 通过(正确地)传递 None 作为sheet_name 来加载所有工作表。您也可以正确地迭代它们,但在循环内您总是访问 wb
而无需实际使用工作表 df
的 pandas 数据框。所以你基本上混合了两种解决方案。
所以你有两个选择:
1:删除 pd.load_excel 并通过使用类似
的方式迭代工作表来使用 openpyxlfor sheet in reference_workbook:
print(sheet["B2"])
2:通过访问
df
而不是 wb
,将 OrderedDict 与 pandas 数据框一起使用。但是,因为您通过了 skiprows=2
,所以您切断了 B2,并且工作表将从第 3 行开始。