如何用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




