使用Openpyxl识别首列重复ID并合并对应列内容
Excel重复ID对应文本合并问题修复
原代码的问题
- 文本拼接逻辑错误:
' '.join(text)是把单个字符串拆成字符逐个空格拼接,比如输入"测试文本"会变成"测 试 文 本",完全不是合并同一ID的多个文本内容。 - 未指定写入目标单元格:代码中
cell.value = newcells的cell变量未定义,等于没往表格里写入任何有效内容。 - 缺失ID分组逻辑:仅判断前后行ID是否相同,但未收集同一ID下的所有I列文本,自然无法完成合并操作。
修正后的代码
# 按ID分组,收集对应I列的所有文本 id_text_map = {} for row in sheet.iter_rows(min_row=1, values_only=True): id_val = row[0] # A列对应元组第0位索引 text_val = str(row[8]) # I列对应元组第8位索引,转成字符串避免空值报错 if id_val not in id_text_map: id_text_map[id_val] = [] id_text_map[id_val].append(text_val) # 在第10列插入新列(对应Excel的J列) sheet.insert_cols(10) # 遍历每一行,将对应ID的合并文本写入新列 for row_num, row in enumerate(sheet.iter_rows(min_row=1, max_row=sheet.max_row), start=1): current_id = row[0].value # 合并同一ID的所有文本,用空格分隔(可自行替换为逗号、换行符等) merged_text = ' '.join(id_text_map[current_id]) # 写入第10列(J列,列索引从0开始计数为9) sheet.cell(row=row_num, column=10).value = merged_text workbook.save(file)
代码说明
- ID分组收集:用字典
id_text_map存储每个ID对应的所有I列文本,确保同一ID下的所有内容都被聚合。 - 写入新列:遍历表格每一行,根据当前行ID从字典中取出合并后的文本,直接写入插入的新列。
- 分隔符灵活调整:如果需要用其他分隔符(比如逗号、换行),只需把
' '.join(...)改成','.join(...)或'\n'.join(...)即可。
内容的提问来源于stack exchange,提问作者s0e
相关产品推荐
相关产品推荐

