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

如何用Openpyxl将表格姓名分类到另一表格不同列并解决空行问题

解决Openpyxl姓名分类时的空行问题

问题根源

你当前的代码三次遍历原表格,每次用ws.append()往对应列追加数据,但append()会从工作表当前最后一行开始写入,导致男性列写完后,女性列从男性列的最后一行开始填充,中间自然出现大量空行。

优化方案一:先分类收集数据,再统一写入

先将三类姓名分别存入三个列表,根据最长列表的长度给较短列表补空字符串,最后逐行把三个列表的对应元素组成整行写入,从根源避免空行。

示例代码:

load_sheet = IMPORTED_TABLE["List1"]
men_names = []
women_names = []
unknown_names = []

# 一次遍历完成分类收集
for row in load_sheet.values:
    for value in row:
        first_name = value.split(" ")[0]
        if first_name in NAME_LIST.men:
            men_names.append(value)
        elif first_name in NAME_LIST.women:
            women_names.append(value)
        else:
            unknown_names.append(value)

# 确定最长列表长度,补全短列表
max_length = max(len(men_names), len(women_names), len(unknown_names))
men_names += [""] * (max_length - len(men_names))
women_names += [""] * (max_length - len(women_names))
unknown_names += [""] * (max_length - len(unknown_names))

# 逐行写入工作表
for m, w, u in zip(men_names, women_names, unknown_names):
    ws.append([m, w, u])

优化方案二:直接定位单元格写入

一次遍历原表格,同时维护三个计数器记录每类姓名的当前行号,直接写入对应列的指定单元格,完全避开空行问题。

示例代码:

load_sheet = IMPORTED_TABLE["List1"]
men_row = 1
women_row = 1
unknown_row = 1

for row in load_sheet.values:
    for value in row:
        first_name = value.split(" ")[0]
        if first_name in NAME_LIST.men:
            ws.cell(row=men_row, column=1, value=value)
            men_row += 1
        elif first_name in NAME_LIST.women:
            ws.cell(row=women_row, column=2, value=value)
            women_row += 1
        else:
            ws.cell(row=unknown_row, column=3, value=value)
            unknown_row += 1

关于删除已存在的空单元格

Openpyxl没有直接删除空单元格的函数,但可以通过遍历删除空行(从后往前删避免索引错乱),不过这种方法不如从源头避免空行高效:

# 删除工作表中的空行
for row in range(ws.max_row, 0, -1):
    if all(cell.value is None for cell in ws[row]):
        ws.delete_rows(row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:04:56