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

如何用Openpyxl获取.xlsx合并单元格间行数据并匹配所属分类

解决Openpyxl提取合并分类标题下数据的问题

核心问题说明

你遇到的MergedCell无.coordinate属性的问题,是因为合并区域内除左上角单元格外,其他单元格都是MergedCell对象——这类对象仅作为合并标记,没有独立坐标和值,实际标题值存储在合并区域的左上角单元格。下面是具体的解决方案:

步骤1:加载工作表并收集分类信息

先遍历工作表的所有合并单元格范围,筛选出目标分类标题,并记录每个分类对应的数据起始行:

from openpyxl import load_workbook

# 加载本地Excel文件(注意:Google Docs的表格需先导出为.xlsx再处理)
wb = load_workbook("your_file.xlsx")
ws = wb.active

# 存储分类名称与数据行范围
category_ranges = []

# 遍历所有合并单元格区域
for merged_range in ws.merged_cells.ranges:
    # 获取合并区域左上角单元格的标题值
    title_cell = ws.cell(row=merged_range.min_row, column=merged_range.min_col)
    category_name = title_cell.value
    # 筛选你需要的分类(可根据实际标题调整)
    if category_name in ["Processors", "Motherboards"]:
        # 数据从分类标题行的下一行开始
        category_ranges.append({
            "name": category_name,
            "start_row": merged_range.max_row + 1,
            "end_row": None
        })

# 为每个分类设置数据结束行(下一个分类的起始行-1)
for i in range(len(category_ranges)-1):
    category_ranges[i]["end_row"] = category_ranges[i+1]["start_row"] - 1

# 最后一个分类的结束行是工作表最大行
if category_ranges:
    category_ranges[-1]["end_row"] = ws.max_row

步骤2:提取各分类下的数据

根据上面记录的行范围,提取对应分类的数据:

# 存储最终结果:分类名 -> 数据行列表
category_data = {}

for cat in category_ranges:
    cat_name = cat["name"]
    start = cat["start_row"]
    end = cat["end_row"]
    
    # 跳过无数据的分类
    if start > end:
        category_data[cat_name] = []
        continue
    
    # 提取数据(示例假设数据在第1-3列,可根据实际表格调整列范围)
    rows = []
    for row_num in range(start, end+1):
        row_values = [ws.cell(row=row_num, column=col).value for col in range(1,4)]
        rows.append(row_values)
    
    category_data[cat_name] = rows

# 输出结果示例
for name, data in category_data.items():
    print(f"=== {name} ===")
    for line in data:
        print(line)

关键注意事项

  1. Google Docs表格处理:需先将Google Sheets导出为.xlsx格式,再用Openpyxl加载处理,无法直接读取在线链接。
  2. 合并单元格操作:永远通过ws.merged_cells.ranges获取合并区域范围,不要直接操作MergedCell对象。
  3. 列范围调整:代码中列范围range(1,4)对应第1到第3列,需根据你的表格实际数据列修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:01:01