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
问题拆解
- 空字节
\x00的锅:你用bat生成的note.txt大概率是UTF-16编码保存的(Windows下部分命令输出默认会用这个编码),这种编码的ASCII字符后面会跟着空字节,而Excel单元格完全不支持带空字节的内容。 - 数据格式不对:报错里传入的是一个列表,
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
相关产品推荐
相关产品推荐

