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)は文字列のみを置換します。リストデータを書き込み、.append()を使用する場合は次のようになります。

worksheet.append(data)

不正な文字をフィルタリングすることは比較的困難です。

この場合、問題を解決するために依存しているworksheet.pyファイルを変更できます。エラーメッセージに表示されたファイルをクリックするだけです。

image-20221221122149059

エラーは664行目にあり、ここにcontentが存在します。したがって、不正な文字を空文字で置き換えるだけです。

image-20221221122458811

修正後のコードは次のようになります:

image-20221221122856867

忘れずに

from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。