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

Python调用bat生成txt写入Excel报错:无法转换内容至Excel

解决openpyxl写入多行带空字节文本到Excel的报错问题

兄弟,我瞅你这情况是同时踩了文本编码和openpyxl单元格数据格式的两个坑,咱们一步步来捋清楚:

首先看你抛出的报错核心问题:

ValueError: Cannot convert ['яюS\x00A\x00M\x00,\x00S\x003\x00C\x003\x005\x000\x00,\x00H\x00T\x00N\x000\x000\x008\x009\x00\n', '\x00\n', '\x00S\x00A\x00M\x00,\x00C\x007\x00H\x00G\x007\x00,\x00H\x00T\x00H\x00M\x005\x000\x000\x000\x001\x007\x00\n', '\x00\n', '\x00'] to Excel

问题拆解

  1. 空字节\x00的锅:你用bat生成的note.txt大概率是UTF-16编码保存的(Windows下部分命令输出默认会用这个编码),这种编码的ASCII字符后面会跟着空字节,而Excel单元格完全不支持带空字节的内容。
  2. 数据格式不对:报错里传入的是一个列表,ws.append()方法里每个元素对应一个单元格,如果你想把多行文本塞进同一个单元格,不能直接传列表,得把它转成单个字符串。

修正后的代码

针对这两个问题,直接改代码就行:

from openpyxl import load_workbook
import subprocess

filename = "1.xlsx"
wb = load_workbook(filename)
# 这里默认取第一个工作表,也可以指定表名比如wb['Sheet1']
ws = wb.active

# 运行bat生成文件
subprocess.check_call('monitor.bat', shell=True)

# 关键修改1:用utf-16编码读取,自动去掉空字节
with open('note.txt', 'r', encoding='utf-16') as mon:
    # 关键修改2:读取全部内容,转成单个字符串,同时去掉首尾多余空行
    monitors = mon.read().strip()

# 现在monitors是干净的字符串,能正常写入单元格了
ws.append([var1, var2, monitors])

wb.save(filename)

额外小技巧

  • 如果不确定文件编码,还可以试试encoding='utf-16le'或者encoding='utf-8-sig',根据实际情况调整。
  • 要是想保留原文本的换行格式,记得给单元格开自动换行:
    from openpyxl.styles import Alignment
    # 获取刚写入的单元格(假设是最后一行第3列)
    target_cell = ws.cell(row=ws.max_row, column=3)
    target_cell.alignment = Alignment(wrap_text=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:07:30