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
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。