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

如何用Python将多文本文件导入Excel(单文件单工作表)及报错解决

解决Python提取多文本文件到Excel(单文件对应单工作表)及文件损坏报错问题

你遇到的Excel报错“Invalid at the top level of the document”,几乎可以肯定是因为代码没有用合法的方式生成Excel文件——比如直接把纯文本内容写入了.xlsx/.xls文件,而Excel的文件格式是结构化的压缩XML,不是普通文本,自然无法识别。下面我会给出两种可靠的实现方案,同时支持处理全部或部分目标文件。

方案一:用openpyxl精细控制(适合需要自定义格式/内容处理的场景)

openpyxl是专门操作xlsx格式的库,能帮我们创建合法的Excel结构,每个文本文件对应一个独立工作表:

from openpyxl import Workbook
import os

# 替换成你的文本文件所在文件夹路径
folder_path = "./text_files"
# 可灵活调整要处理的文件列表,比如只处理其中两个
target_files = ["outputgooderr.txt", "outputbaderr.txt", "fixed_inv.txt"]
output_excel = "text_to_excel.xlsx"

# 创建新工作簿,删除默认的空白工作表
wb = Workbook()
wb.remove(wb.active)

for file_name in target_files:
    file_full_path = os.path.join(folder_path, file_name)
    
    # 跳过不存在的文件
    if not os.path.exists(file_full_path):
        print(f"⚠️ 文件 {file_name} 不存在,跳过处理")
        continue
    
    # 生成合法的工作表名称(替换Excel不允许的特殊字符)
    sheet_name = os.path.splitext(file_name)[0].replace('/', '_').replace('\\', '_').replace(':', '_')
    # 避免表名过长(Excel限制31字符)
    if len(sheet_name) > 31:
        sheet_name = sheet_name[:28] + "..."
    ws = wb.create_sheet(title=sheet_name)
    
    # 读取文本文件,注意编码(根据你的文件实际编码调整,比如gbk/utf-8-sig)
    try:
        with open(file_full_path, 'r', encoding='utf-8') as f:
            # 逐行读取并写入工作表
            for row_idx, line in enumerate(f, start=1):
                # 去掉换行符,若文本是多列分隔的,可拆分后写入多列(比如line.strip().split('\t'))
                clean_line = line.strip()
                ws.cell(row=row_idx, column=1, value=clean_line)
        print(f"✅ 成功处理 {file_name}")
    except Exception as e:
        print(f"❌ 处理 {file_name} 失败:{str(e)}")

# 保存工作簿
wb.save(output_excel)
print(f"\n🎉 所有文件处理完成,输出文件:{output_excel}")

方案二:用pandas快速实现(适合简单文本转Excel,代码更简洁)

pandas能一键读取文本并写入Excel,代码量更少,适合不需要复杂格式控制的场景:

import pandas as pd
import os

folder_path = "./text_files"
target_files = ["outputgooderr.txt", "outputbaderr.txt", "fixed_inv.txt"]
output_excel = "text_to_excel_pandas.xlsx"

# 用ExcelWriter管理多工作表写入
with pd.ExcelWriter(output_excel) as writer:
    for file_name in target_files:
        file_full_path = os.path.join(folder_path, file_name)
        
        if not os.path.exists(file_full_path):
            print(f"⚠️ 文件 {file_name} 不存在,跳过")
            continue
        
        sheet_name = os.path.splitext(file_name)[0].replace('/', '_').replace('\\', '_').replace(':', '_')
        if len(sheet_name) > 31:
            sheet_name = sheet_name[:28] + "..."
        
        try:
            # 读取文本文件:header=None表示无表头,sep='\n'表示按行分割成单列
            # 如果你的文本是用逗号/制表符分隔的多列,改成sep=','或sep='\t'即可
            df = pd.read_table(file_full_path, encoding='utf-8', header=None, sep='\n')
            # 写入工作表,index=False去掉行号,header=False去掉默认表头
            df.to_excel(writer, sheet_name=sheet_name, index=False, header=False)
            print(f"✅ 成功处理 {file_name}")
        except Exception as e:
            print(f"❌ 处理 {file_name} 失败:{str(e)}")

print(f"\n🎉 输出文件已生成:{output_excel}")

关键注意事项

  • 编码问题:如果读取文本时出现乱码,把encoding='utf-8'改成encoding='gbk'或encoding='utf-8-sig'(适用于带BOM的UTF-8文件)。
  • 工作表名称限制:Excel不允许表名包含/ \ : ? * [ ]等字符,且长度不能超过31,代码里已经做了简单处理,你可以根据需求调整。
  • 文本内容格式:如果你的文本文件是多列数据(比如空格/制表符分隔),在openpyxl里可以用line.strip().split('\t')拆分,然后循环写入多列;在pandas里调整sep参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:16:39