我需要使用
pandas
保存 Excel 文件。数据来自数据库,很多时候文本字段包含一些奇怪的字符,并且会引发 openpyxl
。针对这种情况我有一个解决方案,可以找出哪张纸、哪一行、哪一列导致了问题。
但是最近数据给了我这样的错误:IllegalCharacterError
我怎样才能把它变成和另一个一样的错误呢?也许替换一些字节?
有两个文本的示例。上面的一个创建
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
,下面的一个创建
ValueError
。请参阅要点中的代码。 stackoverflow 无法正确保存下面的代码。
IllegalCharacterError
我使用的设置是
from openpyxl import Workbook
text = "" # Including three bytes: hexadecimal FFBFBF resulting ValueError
# text = '\x16' # resulting IllegalCharacterError
wb = Workbook()
ws = wb.active
ws.append([text])
wb.save("test.xlsx")
openpyxl 3.1.2
OS Linux-6.11.5-200.fc40.x86_64-x86_64-with-glibc2.39 (Fedora)
Python 3.12.7 (main, Oct 1 2024, 00:00:00) [GCC 14.2.1 20240912 (Red Hat 14.2.1-3)]
中,异常是在不同的步骤中引发的(to_excel vs writer.close),在第二种情况下,我什至无法获取导致问题的文本。
我什至认为我应该在 openpyxl 的 github 页面上创建一个与此相关的问题。我认为它应该平等地处理两个字符编码问题,引发pandas
。有道理吗?
IllegalCharacterError
是由于字符串中的非 XML 兼容字符造成的,而
ValueError
可能是由于 openpyxl 不支持的控制字符造成的。为了统一处理这两个错误,您可以创建一个自定义函数来清理文本数据,然后再将其保存到 Excel。以下是您可以如何执行此操作的示例:
IllegalCharacterError
此函数首先删除非 ASCII 字符,然后删除控制字符,确保文本既兼容 XML,又不含非法字符。