You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:18:12