openpyxl 中的 IllegalCharacterError 与 ValueError

问题描述 投票:0回答:1

我需要使用

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。有道理吗?

    

python pandas character-encoding openpyxl
1个回答
0
投票
IllegalCharacterError

是由于字符串中的非 XML 兼容字符造成的,而

ValueError
可能是由于 openpyxl 不支持的控制字符造成的。
为了统一处理这两个错误,您可以创建一个自定义函数来清理文本数据,然后再将其保存到 Excel。以下是您可以如何执行此操作的示例:

IllegalCharacterError

此函数首先删除非 ASCII 字符,然后删除控制字符,确保文本既兼容 XML,又不含非法字符。

© www.soinside.com 2019 - 2024. All rights reserved.