You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python+openpyxl按行读取指定Excel单元格并实现字典式解析?

解决openpyxl读取Excel行数据并转为字典格式的问题

我来帮你搞定这几个需求:循环读取指定单元格、按行输出目标行内容,以及把数据转换成类似csv.DictReader的字典格式。

一、读取指定单元格/行的内容

你之前的代码遍历了所有行但只取第一列,所以输出的是第一列的所有内容。这里提供两种方式满足你的需求:

方式1:循环单独读取指定单元格

如果需要逐个读取A4、B4、C4、D4这些单元格,可以直接通过Excel单元格地址访问:

from openpyxl import load_workbook

wb = load_workbook('item.xlsx')
sheet = wb['Sheet1']

# 定义要读取的单元格地址列表
target_cells = ['A4', 'B4', 'C4', 'D4']
for cell_addr in target_cells:
    print(sheet[cell_addr].value)

运行后会逐行输出:

Max
Min
Del
Enter

方式2:直接读取整行并按行输出

要一次性获取第4行的所有内容并拼接成字符串输出,直接定位到该行即可:

from openpyxl import load_workbook

wb = load_workbook('item.xlsx')
sheet = wb['Sheet1']

# 获取第4行的所有单元格(openpyxl中行号从1开始计数)
row_4 = sheet[4]
# 把单元格值拼接成你想要的格式输出
print(' '.join([cell.value for cell in row_4]))

运行后会得到你期望的结果:Max Min Del Enter

二、将数据转为类似DictReader的字典格式

要实现和csv.DictReader一样的表头对应功能,我们可以把第一行作为字典的键,下面的每一行数据对应到键上:

from openpyxl import load_workbook

wb = load_workbook('item.xlsx')
sheet = wb['Sheet1']

# 获取第一行作为表头(字典的键)
headers = [cell.value for cell in sheet[1]]

# 遍历从第2行开始的所有数据行,生成字典列表
data_list = []
for row in sheet.iter_rows(min_row=2):
    row_dict = {headers[i]: cell.value for i, cell in enumerate(row)}
    data_list.append(row_dict)

# 打印查看结果
for item in data_list:
    print(item)

运行后会得到如下输出:

{'Item': 'Black', 'Cat': 'Blue', 'Fit': 'White', 'Hot': 'Red'}
{'Item': 'Easy', 'Cat': 'Hard', 'Fit': 'Moderate', 'Hot': 'Gentle'}
{'Item': 'Max', 'Cat': 'Min', 'Fit': 'Del', 'Hot': 'Enter'}
{'Item': 'First', 'Cat': 'Last', 'Fit': 'Discarded', 'Hot': 'Overestimated'}

之后你就可以像使用DictReader的结果一样,通过表头键访问对应的值,比如data_list[2]['Item']就能拿到Max

补充小提示

openpyxl的行和列都是从1开始计数的,和Excel原生的Range写法完全一致,你可以用sheet[n]快速获取第n行,用sheet['A']快速获取A列,非常直观。

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

火山引擎 最新活动