PythonでExcelファイルを操作する際に、openpyxl
ライブラリを使用することがよくあります。しかし、特定の文字列をExcelファイルに書き込むときにopenpyxl.utils.exceptions.IllegalCharacterError
が発生することがあります。
このエラーは、Excelが認識できない文字(ASCIIコードが32未満の文字)が含まれているときに発生します。この問題を解決するためには、不適切な文字を取り除くか、適切な文字に置き換える必要があります。
以下に、この問題を解決するためのPythonコードの一例を示します。
import re
import openpyxl
_ILLEGAL_CHARACTERS_RE = re.compile(r"[\\000-\\010]|[\\013-\\014]|[\\016-\\037]")
def _fix_csv(csv_file_path: str, fixed_csv_path: str):
with open(csv_file_path, "r") as fi:
with open(fixed_csv_path, "w") as fo:
line = fi.readline()
while line:
fixed_line = _ILLEGAL_CHARACTERS_RE.sub("", line)
fo.write(fixed_line)
line = fi.readline()
def csv_to_xlsx(csv_file_path: str, output_file_path: str):
fixed_csv_path = '.temp.csv'
try:
_fix_csv(csv_file_path, fixed_csv_path)
wb = openpyxl.Workbook(write_only=True)
wb.create_sheet('Sheet1')
wb.active = wb.sheetnames.index('Sheet1')
ws = wb.active
with open(fixed_csv_path, "r") as f:
reader = csv.reader(f)
for row in reader:
ws.append(row)
wb.save(output_file_path)
finally:
if os.path.exists(fixed_csv_path):
os.remove(fixed_csv_path)
csv_to_xlsx("入力のcsvファイル.csv", "出力のxlsxファイル.xlsx")
このコードは、CSVファイルから不適切な文字を取り除き、その結果を新しいCSVファイルに書き込みます。その後、新しいCSVファイルを読み込み、その内容をExcelファイルに書き込みます。
このように、openpyxl.utils.exceptions.IllegalCharacterError
は、適切な前処理によって解決することが可能です。Pythonとopenpyxl
を使用して、Excelファイルの操作を行う際には、このようなエラーに注意してください。