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

使用Python的openpyxl将TXT数据写入Excel时跳行,求问题排查

排查openpyxl写入Excel时隔行跳过的问题

嘿,我来帮你揪出这个隔行写入的bug!用openpyxl做文件转写时碰到这种情况,基本逃不开这几个常见的坑,咱们一个个拆解:

1. 手动维护行号时重复递增(最常见)

很多人习惯手动给row_num加1,但一不小心就会在循环里多写一次递增,或者同时混用了ws.append()和手动行号赋值——append()本身会自动把数据加到下一行,这时候再手动加行号,自然就会跳行了。

举个错误示范:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
row_num = 1

with open("data.txt", "r") as f:
    for line in f:
        ws.cell(row=row_num, column=1, value=line.strip())
        row_num += 1
        # 不小心多写了一次,或者在别的逻辑里又加了一次row_num
        row_num += 1

解决办法:要么严格检查循环里的行号递增逻辑,确保每次循环只加一次;要么直接用ws.append()方法,它会自动帮你定位到下一行,完全不用手动管行号:

with open("data.txt", "r") as f:
    for line in f:
        ws.append([line.strip()])  # 把数据放进列表,append会自动追加到末尾行

2. 遍历行的同时修改工作表结构

如果你用iter_rows()或iter_cols()遍历工作表的同时,又做了插入/追加行的操作,openpyxl的迭代器会因为工作表结构变化而“迷路”,导致跳过行。比如:

for row in ws.iter_rows(min_row=1, max_row=ws.max_row):
    # 遍历过程中追加行,会打乱迭代器的遍历逻辑
    ws.append(["new content from txt"])

解决办法:先把TXT里的所有数据读取到一个列表里,再一次性写入Excel,避免边遍历边修改:

data_list = []
with open("data.txt", "r") as f:
    data_list = [line.strip() for line in f if line.strip()]  # 顺便过滤空白行

# 一次性写入
for item in data_list:
    ws.append([item])

3. TXT文件本身存在空白行

有时候不是代码的锅,是你的源TXT文件里本来就每隔一行有空白行,写入Excel后自然看起来像是跳行。

解决办法:读文件的时候过滤掉空白行:

with open("data.txt", "r") as f:
    for line in f:
        clean_line = line.strip()
        if clean_line:  # 只处理非空的行
            ws.append([clean_line])

4. 错误使用插入行操作

如果你的代码里用了ws.insert_rows()来插入行,然后手动维护行号时逻辑出错,也会导致跳行。比如每次插入后错误地递增行号,导致跳过了一行:

row_num = 1
with open("data.txt", "r") as f:
    for line in f:
        ws.insert_rows(row_num)
        ws.cell(row=row_num, column=1, value=line.strip())
        row_num += 1  # 这里错了:insert后原来的row_num位置已经被新行占据,下一次插入应该还是row_num,而不是+1

解决办法:要么改用append()(更简单),要么调整行号逻辑:

row_num = 1
with open("data.txt", "r") as f:
    for line in f:
        ws.insert_rows(row_num)
        ws.cell(row=row_num, column=1, value=line.strip())
        row_num += 2  # 或者根据实际需求调整,不过还是append香

先从手动行号和append()混用的情况查起,这是最容易踩的坑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:59:03