使用 openpyxl 不按数字而是按列标题(ws 第一行中的字符串值)迭代列的最简单方法是什么:
如下所示:
for cell in ws.columns['revenue']:
print(cell.value)
不幸的是,
openpyxl
不直接支持像
ws.columns['revenue']
这样按列标题进行迭代。
openpyxl
中的
ws.columns
返回所有列作为列对象的生成器,你必须迭代它们并检查每个单元格以找到匹配的标题。
下面是如何按列标题迭代列的两种方法:
1. 使用
Worksheet.iter_rows()
并查找标题索引:
import openpyxl
# 加载工作簿和工作表
wb = openpyxl.load_workbook('your_file.xlsx')
ws = wb['Sheet1']
# 你要查找的列标题
column_title = 'revenue'
# 查找列索引
for col_idx, column in enumerate(ws.iter_cols(1, ws.max_column)):
if column[0].value == column_title:
column_index = col_idx + 1
break
else:
raise ValueError(f"未找到列 '{column_title}'")
# 使用找到的索引迭代列中的单元格
for row in ws.iter_rows(min_row=2, min_col=column_index, max_col=column_index):
for cell in row:
print(cell.value)
此代码首先迭代第一行以找到与你的
column_title
匹配的标题单元格。找到后,它会存储列索引并使用
ws.iter_rows()
迭代该特定列,从第二行开始。
2. 使用
Worksheet.iter_rows()
并直接访问单元格:
import openpyxl
# 加载工作簿和工作表
wb = openpyxl.load_workbook('your_file.xlsx')
ws = wb['Sheet1']
# 你要查找的列标题
column_title = 'revenue'
# 在标题行中查找列索引
header_row = next(ws.iter_rows())
column_index = None
for idx, cell in enumerate(header_row):
if cell.value == column_title:
column_index = idx
break
# 如果找到列标题,则迭代所有数据行
if column_index is not None:
for row in ws.iter_rows(min_row=2):
cell = row[column_index]
print(cell.value)
此代码首先在标题行中查找列索引。找到后,它会在迭代数据行时使用该索引直接访问该列中的单元格。
这两种方法都实现了相同的结果:它们允许你按列标题而不是数字索引迭代列中的单元格。选择你认为更易读且更适合你的用例的方法。
标签:python,excel,openpyxl From: 34731662