Python - Openpyxl - “UserWarning: Unknown extension”问题

urd*_*boy 2 python excel openpyxl

我正在努力学习Python(第 2 天),并希望先用Excel书本练习,因为这是我感到舒适/流利的地方。

马上我遇到了一个错误,我在运行以下代码时不明白:

import openpyxl

wb = openpyxl.load_workbook("/Users/Scott/Desktop/Workbook1.xlsx")

print(wb.sheetnames)
Run Code Online (Sandbox Code Playgroud)

这确实按要求打印了我的工作表名称,但后面跟着:

/Users/Scott/PycharmProjects/Excel/venv/lib/python3.7/site-packages/openpyxl/worksheet/_reader.py:293: UserWarning: Unknown extension is not supported and will be removed
  warn(msg)
Run Code Online (Sandbox Code Playgroud)

我发现了其他指向切片器/条件格式等的问题,但这不适用于这里。这是我刚做的一本书,在保存前只添加了 3 张。它没有数据,没有格式,并且扩展名有效。我的 excel 上也没有安装附加组件。

知道为什么我会收到此错误吗?我该如何解决?

在此处输入图片说明

Python:3.7
openpyxl:2.6

小智 9

我有一个类似的问题。我开发了一个读取和写入 Excel 文件的应用程序。它在我的 Windows 计算机上运行良好,但后来我尝试在朋友的 mac 上运行它。它显示了同样的错误。我可以通过更改工作簿的配置来“修复”它,如下所示:

import openpyxl as op

wb = op.load_workbook(file, read_only=True, data_only=True)
Run Code Online (Sandbox Code Playgroud)

但是,如您所见,您只能使用此配置读取 Excel 文件。最后,我意识到我朋友的电脑上没有安装 Microsoft Office。安装它真正解决了我的问题。


Inn*_*der 8

Python - Openpyxl - “UserWarning:未知扩展”问题

要了解该错误,您需要了解 XLSX 文件中的内容。最好的查看方法是将扩展名更改为 zip 并打开它。在里面你会看到一个名为 的文件[Content_Types].xml和其他内容的目录。如果您查看 Content_Types 中的 XML,您将看到一个<Types ...>包含其他标签的标签,如下所示:

<Default Extension="png" ContentType="image/png"/>
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
<Default Extension="xml" ContentType="application/xml"/>
Run Code Online (Sandbox Code Playgroud)

请注意“扩展”属性。这就是警告所指的内容。在上面的示例中,我的文件包含Extension="png"- 未知的扩展名。对我来说,指定就足够了read_only=True,错误就消失了,例如:

wb = openpyxl.load_workbook(file, read_only=True)
Run Code Online (Sandbox Code Playgroud)

我还可以通过将除图像之外的所有内容复制到新工作簿并保存来解决该问题。经检查,新工作簿中的xml不再包含png属性。

请注意,使用 openpyxl 读取 pandas 并pd.read_excel生成相同的“未知扩展”错误,但无法传递参数read_only。您可以通过以下方式抑制特定警告:

import warnings
warnings.filterwarnings('ignore', category=UserWarning, module='openpyxl')
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。这应该是公认的答案 (2认同)

小智 7

这个问题是几年前提出的,但我现在用 openpyxl 遇到它并需要修复,因为警告对我的最终用户造成混淆和误导。

来自 openpyxl 的警告来自 stdlib 警告库,它可以被抑制。

import warnings
warnings.simplefilter("ignore")
Run Code Online (Sandbox Code Playgroud)

这就是“用锤子敲击它”的方法。可以在此处找到更详细的警告抑制级别:https : //docs.python.org/3/library/warnings.html