错误消息(贴出来给搜索索引):
File "D:\Python\venv\lib\site-packages\openpyxl\worksheet\worksheet.py", line 664, in append
cell = Cell(self, row=row_idx, column=col_idx, value=content)
File "D:\Python\venv\lib\site-packages\openpyxl\cell\cell.py", line 116, in __init__
self.value = value
File "D:\Python\venv\lib\site-packages\openpyxl\cell\cell.py", line 215, in value
self._bind_value(value)
File "D:\Python\venv\lib\site-packages\openpyxl\cell\cell.py", line 194, in _bind_value
value = self.check_string(value)
File "D:\Python\venv\lib\site-packages\openpyxl\cell\cell.py", line 162, in check_string
raise IllegalCharacterError
openpyxl.utils.exceptions.IllegalCharacterError
根据提示,网上找到的解决方法:#
将 openpyxl 定义的非法字符用空字符代替,具体方法如下
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
import openpyxl
import re
# 写入之前,先将非法字符用空格代替
content = ILLEGAL_CHARACTERS_RE.sub(r'', content)
ws.cell(ridx, cidx).value = content
这里ILLEGAL_CHARACTERS_RE.sub(r'', content)
只对字符串进行替换。如果写入的是 list 数据,并使用.append()
写入。如下:
worksheet.append(data)
实现过滤非法字符相对比较困难。
这个时候就可以修改依赖的worksheet.py
文件来解决。直接点击报错中的文件
报错在664
行,这里刚好存在content
。所以现在只需要在前面把非法字符用空字符代替就可以了。
修改完代码如下:
别忘了
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE