エラーメッセージ(検索インデックスに貼り付ける):
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)
は文字列のみを置換します。リストデータを書き込み、.append()
を使用する場合は次のようになります。
worksheet.append(data)
不正な文字をフィルタリングすることは比較的困難です。
この場合、問題を解決するために依存しているworksheet.py
ファイルを変更できます。エラーメッセージに表示されたファイルをクリックするだけです。
エラーは664
行目にあり、ここにcontent
が存在します。したがって、不正な文字を空文字で置き換えるだけです。
修正後のコードは次のようになります:
忘れずに
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE