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

Python XlsxWriter:合并列2时获取非空值的实现问题

合并Excel列并保留非空描述值

需求:将列2(对应description字段)与列1(对应name字段)按相同行数合并,合并列2后需显示其中的非空值。

现有代码

my_list = [
            {'field1': [
                {'name': 'value1', 'description': "" 
                 },
                {'name': 'value1', 'description': "this is descr..." 
                 },
                {'name': 'value1', 'description': "" 
                 },

            ]
             },
        ]
        row = 206
        for record in my_list:
            row_mem = row
            for rec in record['field1']:
                sheet.write(row, 2, rec['description'])
                row += 1
            sheet.merge_range(row_mem, 1, row - 1, 1, rec['name'])

问题分析

  • 原代码仅合并了列1,列2未合并,不符合需求;
  • 直接用merge_range(row_mem, 2, row - 1, 2, rec['description'])时,rec是循环最后一条数据(description为空),导致合并后列2显示空值。

解决方案

先收集当前分组内的所有description,筛选出非空值,再对列2执行合并并写入该非空值:

my_list = [
    {'field1': [
        {'name': 'value1', 'description': ""},
        {'name': 'value1', 'description': "this is descr..."},
        {'name': 'value1', 'description': ""},
    ]},
]
row = 206
for record in my_list:
    row_mem = row
    descriptions = []
    # 遍历分组内数据,收集描述并逐行写入(可选,若不需要保留单个单元格内容可省略)
    for rec in record['field1']:
        sheet.write(row, 2, rec['description'])
        descriptions.append(rec['description'])
        row += 1
    # 合并列1
    sheet.merge_range(row_mem, 1, row - 1, 1, record['field1'][0]['name'])
    # 获取第一个非空描述值,若全空则返回空字符串
    non_empty_desc = next((d for d in descriptions if d.strip()), "")
    # 合并列2并写入非空值
    sheet.merge_range(row_mem, 2, row - 1, 2, non_empty_desc)

说明:

  • 通过next((d for d in descriptions if d.strip()), "")筛选出第一个非空的描述值,确保合并后列2显示有效内容;
  • 若分组内存在多个非空描述,可根据需求调整逻辑(比如拼接所有非空值)。

内容的提问来源于stack exchange,提问作者K.ju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:07:39