求助:基于openpyxl实现以Excel合并单元格为键的指定格式字典生成
解决方案
核心目标是将A列合并单元格的唯一值作为字典键,收集对应行的B列数据作为值列表,以下是修正后的实现方案:
1. 优化合并单元格取值函数
原代码中ids.column会报错,因为cell_value返回的是单元格值而非Cell对象。这里优化函数,确保稳定获取合并/非合并单元格的值:
from openpyxl import load_workbook from openpyxl.cell.cell import MergedCell def get_cell_value(sheet, row, col): cell = sheet.cell(row=row, column=col) if not isinstance(cell, MergedCell): return cell.value # 查找当前单元格所属的合并范围,返回起始单元格的值 for merged_range in sheet.merged_cells.ranges: if cell.coordinate in merged_range: return merged_range.start_cell.value return None
2. 生成目标格式字典
遍历从第2行开始的行,以A列合并值为键,收集对应B列的值,直到A列值为空时停止:
# 加载工作簿 wb = load_workbook(filename="./Test.xlsx") ws = wb.active result_dict = {} current_row = 2 while True: # 获取A列当前行的合并值 key = get_cell_value(ws, current_row, 1) if key is None: break # A列值为空,终止遍历 # 获取B列当前行的值 value = ws.cell(row=current_row, column=2).value # 构建字典:键不存在则创建空列表,再追加值 if key not in result_dict: result_dict[key] = [] result_dict[key].append(value) current_row += 1 # 输出最终结果 print(result_dict)
关键说明
- 用
sheet.cell(row, column)替代坐标字符串(如'A2'),更适合循环遍历场景 - 合并单元格取值逻辑:通过判断单元格所属合并范围,直接取范围起始单元格的值
- 字典构建逻辑:先检查键是否存在,不存在则初始化空列表,再追加对应B列数据
内容的提问来源于stack exchange,提问作者Dummy Cron
相关产品推荐
相关产品推荐

