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
相关产品推荐
相关产品推荐

