Minxio

Minxio

人生如逆旅,我亦是行人。

openpyxl写入时出现openpyxl.utils.exceptions.IllegalCharacterError错误

错误消息(贴出来给搜索索引):

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

image-20221221121108546

根据提示,网上找到的解决方法:#

将 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文件来解决。直接点击报错中的文件

image-20221221122149059

报错在664行,这里刚好存在content。所以现在只需要在前面把非法字符用空字符代替就可以了。

image-20221221122458811

修改完代码如下:

image-20221221122856867

别忘了

from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。