錯誤訊息(貼出來給搜索索引):
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